(0) Obligation:

JBC Problem based on JBC Program:
No human-readable program information known.

Manifest-Version: 1.0 Created-By: 1.6.0_20 (Apple Inc.) Main-Class: Test2

(1) JBC2FIG (SOUND transformation)

Constructed FIGraph.

(2) Obligation:

FIGraph based on JBC Program:
Graph of 93 nodes with 1 SCC.

(3) FIGtoITRSProof (SOUND transformation)

Transformed FIGraph to ITRS rules

(4) Obligation:

ITRS problem:

The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean

The TRS R consists of the following rules:
Load454(i101, i102, i103) → Cond_Load454(i102 > i103 && i102 <= i103 && i101 <= i102 && i101 + i102 + 3 * i103 >= 0, i101, i102, i103)
Cond_Load454(TRUE, i101, i102, i103) → Load454(i101, i102, i103)
Load454(i101, i102, i103) → Cond_Load4541(i102 <= i103 && i101 <= i102 && i101 + i102 + 3 * i103 >= 0, i101, i102, i103)
Cond_Load4541(TRUE, i101, i102, i103) → Load454(i101 + 1, i102 + 1, i103 - 1)
Load454(i101, i102, i103) → Cond_Load4542(i102 > i103 && i101 <= i102 && i101 + i102 + 3 * i103 >= 0, i101, i102, i103)
Cond_Load4542(TRUE, i101, i102, i103) → Load454(i101 + 1, i102 + -2, i103)
Load454(i101, i102, i103) → Cond_Load4543(i101 > i102 && i101 + i102 + 3 * i103 >= 0, i101, i102, i103)
Cond_Load4543(TRUE, i101, i102, i103) → Load454(i101 + -1, i102, i103)
The set Q consists of the following terms:
Load454(x0, x1, x2)
Cond_Load454(TRUE, x0, x1, x2)
Cond_Load4541(TRUE, x0, x1, x2)
Cond_Load4542(TRUE, x0, x1, x2)
Cond_Load4543(TRUE, x0, x1, x2)

(5) ITRStoIDPProof (EQUIVALENT transformation)

Added dependency pairs

(6) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Boolean, Integer


The ITRS R consists of the following rules:
Load454(i101, i102, i103) → Cond_Load454(i102 > i103 && i102 <= i103 && i101 <= i102 && i101 + i102 + 3 * i103 >= 0, i101, i102, i103)
Cond_Load454(TRUE, i101, i102, i103) → Load454(i101, i102, i103)
Load454(i101, i102, i103) → Cond_Load4541(i102 <= i103 && i101 <= i102 && i101 + i102 + 3 * i103 >= 0, i101, i102, i103)
Cond_Load4541(TRUE, i101, i102, i103) → Load454(i101 + 1, i102 + 1, i103 - 1)
Load454(i101, i102, i103) → Cond_Load4542(i102 > i103 && i101 <= i102 && i101 + i102 + 3 * i103 >= 0, i101, i102, i103)
Cond_Load4542(TRUE, i101, i102, i103) → Load454(i101 + 1, i102 + -2, i103)
Load454(i101, i102, i103) → Cond_Load4543(i101 > i102 && i101 + i102 + 3 * i103 >= 0, i101, i102, i103)
Cond_Load4543(TRUE, i101, i102, i103) → Load454(i101 + -1, i102, i103)

The integer pair graph contains the following rules and edges:
(0): LOAD454(i101[0], i102[0], i103[0]) → COND_LOAD454(i102[0] > i103[0] && i102[0] <= i103[0] && i101[0] <= i102[0] && i101[0] + i102[0] + 3 * i103[0] >= 0, i101[0], i102[0], i103[0])
(1): COND_LOAD454(TRUE, i101[1], i102[1], i103[1]) → LOAD454(i101[1], i102[1], i103[1])
(2): LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(i102[2] <= i103[2] && i101[2] <= i102[2] && i101[2] + i102[2] + 3 * i103[2] >= 0, i101[2], i102[2], i103[2])
(3): COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(i101[3] + 1, i102[3] + 1, i103[3] - 1)
(4): LOAD454(i101[4], i102[4], i103[4]) → COND_LOAD4542(i102[4] > i103[4] && i101[4] <= i102[4] && i101[4] + i102[4] + 3 * i103[4] >= 0, i101[4], i102[4], i103[4])
(5): COND_LOAD4542(TRUE, i101[5], i102[5], i103[5]) → LOAD454(i101[5] + 1, i102[5] + -2, i103[5])
(6): LOAD454(i101[6], i102[6], i103[6]) → COND_LOAD4543(i101[6] > i102[6] && i101[6] + i102[6] + 3 * i103[6] >= 0, i101[6], i102[6], i103[6])
(7): COND_LOAD4543(TRUE, i101[7], i102[7], i103[7]) → LOAD454(i101[7] + -1, i102[7], i103[7])

(0) -> (1), if ((i101[0]* i101[1])∧(i102[0]* i102[1])∧(i102[0] > i103[0] && i102[0] <= i103[0] && i101[0] <= i102[0] && i101[0] + i102[0] + 3 * i103[0] >= 0* TRUE)∧(i103[0]* i103[1]))


(1) -> (0), if ((i101[1]* i101[0])∧(i103[1]* i103[0])∧(i102[1]* i102[0]))


(1) -> (2), if ((i101[1]* i101[2])∧(i102[1]* i102[2])∧(i103[1]* i103[2]))


(1) -> (4), if ((i103[1]* i103[4])∧(i102[1]* i102[4])∧(i101[1]* i101[4]))


(1) -> (6), if ((i103[1]* i103[6])∧(i101[1]* i101[6])∧(i102[1]* i102[6]))


(2) -> (3), if ((i102[2]* i102[3])∧(i103[2]* i103[3])∧(i101[2]* i101[3])∧(i102[2] <= i103[2] && i101[2] <= i102[2] && i101[2] + i102[2] + 3 * i103[2] >= 0* TRUE))


(3) -> (0), if ((i103[3] - 1* i103[0])∧(i101[3] + 1* i101[0])∧(i102[3] + 1* i102[0]))


(3) -> (2), if ((i101[3] + 1* i101[2])∧(i103[3] - 1* i103[2])∧(i102[3] + 1* i102[2]))


(3) -> (4), if ((i103[3] - 1* i103[4])∧(i101[3] + 1* i101[4])∧(i102[3] + 1* i102[4]))


(3) -> (6), if ((i101[3] + 1* i101[6])∧(i103[3] - 1* i103[6])∧(i102[3] + 1* i102[6]))


(4) -> (5), if ((i101[4]* i101[5])∧(i103[4]* i103[5])∧(i102[4]* i102[5])∧(i102[4] > i103[4] && i101[4] <= i102[4] && i101[4] + i102[4] + 3 * i103[4] >= 0* TRUE))


(5) -> (0), if ((i103[5]* i103[0])∧(i101[5] + 1* i101[0])∧(i102[5] + -2* i102[0]))


(5) -> (2), if ((i101[5] + 1* i101[2])∧(i103[5]* i103[2])∧(i102[5] + -2* i102[2]))


(5) -> (4), if ((i102[5] + -2* i102[4])∧(i101[5] + 1* i101[4])∧(i103[5]* i103[4]))


(5) -> (6), if ((i103[5]* i103[6])∧(i102[5] + -2* i102[6])∧(i101[5] + 1* i101[6]))


(6) -> (7), if ((i101[6] > i102[6] && i101[6] + i102[6] + 3 * i103[6] >= 0* TRUE)∧(i101[6]* i101[7])∧(i102[6]* i102[7])∧(i103[6]* i103[7]))


(7) -> (0), if ((i102[7]* i102[0])∧(i103[7]* i103[0])∧(i101[7] + -1* i101[0]))


(7) -> (2), if ((i101[7] + -1* i101[2])∧(i102[7]* i102[2])∧(i103[7]* i103[2]))


(7) -> (4), if ((i103[7]* i103[4])∧(i101[7] + -1* i101[4])∧(i102[7]* i102[4]))


(7) -> (6), if ((i102[7]* i102[6])∧(i101[7] + -1* i101[6])∧(i103[7]* i103[6]))



The set Q consists of the following terms:
Load454(x0, x1, x2)
Cond_Load454(TRUE, x0, x1, x2)
Cond_Load4541(TRUE, x0, x1, x2)
Cond_Load4542(TRUE, x0, x1, x2)
Cond_Load4543(TRUE, x0, x1, x2)

(7) UsableRulesProof (EQUIVALENT transformation)

As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R.

(8) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Boolean, Integer


R is empty.

The integer pair graph contains the following rules and edges:
(0): LOAD454(i101[0], i102[0], i103[0]) → COND_LOAD454(i102[0] > i103[0] && i102[0] <= i103[0] && i101[0] <= i102[0] && i101[0] + i102[0] + 3 * i103[0] >= 0, i101[0], i102[0], i103[0])
(1): COND_LOAD454(TRUE, i101[1], i102[1], i103[1]) → LOAD454(i101[1], i102[1], i103[1])
(2): LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(i102[2] <= i103[2] && i101[2] <= i102[2] && i101[2] + i102[2] + 3 * i103[2] >= 0, i101[2], i102[2], i103[2])
(3): COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(i101[3] + 1, i102[3] + 1, i103[3] - 1)
(4): LOAD454(i101[4], i102[4], i103[4]) → COND_LOAD4542(i102[4] > i103[4] && i101[4] <= i102[4] && i101[4] + i102[4] + 3 * i103[4] >= 0, i101[4], i102[4], i103[4])
(5): COND_LOAD4542(TRUE, i101[5], i102[5], i103[5]) → LOAD454(i101[5] + 1, i102[5] + -2, i103[5])
(6): LOAD454(i101[6], i102[6], i103[6]) → COND_LOAD4543(i101[6] > i102[6] && i101[6] + i102[6] + 3 * i103[6] >= 0, i101[6], i102[6], i103[6])
(7): COND_LOAD4543(TRUE, i101[7], i102[7], i103[7]) → LOAD454(i101[7] + -1, i102[7], i103[7])

(0) -> (1), if ((i101[0]* i101[1])∧(i102[0]* i102[1])∧(i102[0] > i103[0] && i102[0] <= i103[0] && i101[0] <= i102[0] && i101[0] + i102[0] + 3 * i103[0] >= 0* TRUE)∧(i103[0]* i103[1]))


(1) -> (0), if ((i101[1]* i101[0])∧(i103[1]* i103[0])∧(i102[1]* i102[0]))


(1) -> (2), if ((i101[1]* i101[2])∧(i102[1]* i102[2])∧(i103[1]* i103[2]))


(1) -> (4), if ((i103[1]* i103[4])∧(i102[1]* i102[4])∧(i101[1]* i101[4]))


(1) -> (6), if ((i103[1]* i103[6])∧(i101[1]* i101[6])∧(i102[1]* i102[6]))


(2) -> (3), if ((i102[2]* i102[3])∧(i103[2]* i103[3])∧(i101[2]* i101[3])∧(i102[2] <= i103[2] && i101[2] <= i102[2] && i101[2] + i102[2] + 3 * i103[2] >= 0* TRUE))


(3) -> (0), if ((i103[3] - 1* i103[0])∧(i101[3] + 1* i101[0])∧(i102[3] + 1* i102[0]))


(3) -> (2), if ((i101[3] + 1* i101[2])∧(i103[3] - 1* i103[2])∧(i102[3] + 1* i102[2]))


(3) -> (4), if ((i103[3] - 1* i103[4])∧(i101[3] + 1* i101[4])∧(i102[3] + 1* i102[4]))


(3) -> (6), if ((i101[3] + 1* i101[6])∧(i103[3] - 1* i103[6])∧(i102[3] + 1* i102[6]))


(4) -> (5), if ((i101[4]* i101[5])∧(i103[4]* i103[5])∧(i102[4]* i102[5])∧(i102[4] > i103[4] && i101[4] <= i102[4] && i101[4] + i102[4] + 3 * i103[4] >= 0* TRUE))


(5) -> (0), if ((i103[5]* i103[0])∧(i101[5] + 1* i101[0])∧(i102[5] + -2* i102[0]))


(5) -> (2), if ((i101[5] + 1* i101[2])∧(i103[5]* i103[2])∧(i102[5] + -2* i102[2]))


(5) -> (4), if ((i102[5] + -2* i102[4])∧(i101[5] + 1* i101[4])∧(i103[5]* i103[4]))


(5) -> (6), if ((i103[5]* i103[6])∧(i102[5] + -2* i102[6])∧(i101[5] + 1* i101[6]))


(6) -> (7), if ((i101[6] > i102[6] && i101[6] + i102[6] + 3 * i103[6] >= 0* TRUE)∧(i101[6]* i101[7])∧(i102[6]* i102[7])∧(i103[6]* i103[7]))


(7) -> (0), if ((i102[7]* i102[0])∧(i103[7]* i103[0])∧(i101[7] + -1* i101[0]))


(7) -> (2), if ((i101[7] + -1* i101[2])∧(i102[7]* i102[2])∧(i103[7]* i103[2]))


(7) -> (4), if ((i103[7]* i103[4])∧(i101[7] + -1* i101[4])∧(i102[7]* i102[4]))


(7) -> (6), if ((i102[7]* i102[6])∧(i101[7] + -1* i101[6])∧(i103[7]* i103[6]))



The set Q consists of the following terms:
Load454(x0, x1, x2)
Cond_Load454(TRUE, x0, x1, x2)
Cond_Load4541(TRUE, x0, x1, x2)
Cond_Load4542(TRUE, x0, x1, x2)
Cond_Load4543(TRUE, x0, x1, x2)

(9) IDPNonInfProof (SOUND transformation)

The constraints were generated the following way:
The DP Problem is simplified using the Induction Calculus [NONINF] with the following steps:
Note that final constraints are written in bold face.


For Pair LOAD454(i101, i102, i103) → COND_LOAD454(&&(&&(&&(>(i102, i103), <=(i102, i103)), <=(i101, i102)), >=(+(+(i101, i102), *(3, i103)), 0)), i101, i102, i103) the following chains were created:
  • We consider the chain LOAD454(i101[0], i102[0], i103[0]) → COND_LOAD454(&&(&&(&&(>(i102[0], i103[0]), <=(i102[0], i103[0])), <=(i101[0], i102[0])), >=(+(+(i101[0], i102[0]), *(3, i103[0])), 0)), i101[0], i102[0], i103[0]), COND_LOAD454(TRUE, i101[1], i102[1], i103[1]) → LOAD454(i101[1], i102[1], i103[1]) which results in the following constraint:

    (1)    (i101[0]=i101[1]i102[0]=i102[1]&&(&&(&&(>(i102[0], i103[0]), <=(i102[0], i103[0])), <=(i101[0], i102[0])), >=(+(+(i101[0], i102[0]), *(3, i103[0])), 0))=TRUEi103[0]=i103[1]LOAD454(i101[0], i102[0], i103[0])≥NonInfC∧LOAD454(i101[0], i102[0], i103[0])≥COND_LOAD454(&&(&&(&&(>(i102[0], i103[0]), <=(i102[0], i103[0])), <=(i101[0], i102[0])), >=(+(+(i101[0], i102[0]), *(3, i103[0])), 0)), i101[0], i102[0], i103[0])∧(UIncreasing(COND_LOAD454(&&(&&(&&(>(i102[0], i103[0]), <=(i102[0], i103[0])), <=(i101[0], i102[0])), >=(+(+(i101[0], i102[0]), *(3, i103[0])), 0)), i101[0], i102[0], i103[0])), ≥))



    We simplified constraint (1) using rules (IV), (IDP_BOOLEAN) which results in the following new constraint:

    (2)    (>=(+(+(i101[0], i102[0]), *(3, i103[0])), 0)=TRUE<=(i101[0], i102[0])=TRUE>(i102[0], i103[0])=TRUE<=(i102[0], i103[0])=TRUELOAD454(i101[0], i102[0], i103[0])≥NonInfC∧LOAD454(i101[0], i102[0], i103[0])≥COND_LOAD454(&&(&&(&&(>(i102[0], i103[0]), <=(i102[0], i103[0])), <=(i101[0], i102[0])), >=(+(+(i101[0], i102[0]), *(3, i103[0])), 0)), i101[0], i102[0], i103[0])∧(UIncreasing(COND_LOAD454(&&(&&(&&(>(i102[0], i103[0]), <=(i102[0], i103[0])), <=(i101[0], i102[0])), >=(+(+(i101[0], i102[0]), *(3, i103[0])), 0)), i101[0], i102[0], i103[0])), ≥))



    We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (3)    (i101[0] + i102[0] + [3]i103[0] ≥ 0∧i102[0] + [-1]i101[0] ≥ 0∧i102[0] + [-1] + [-1]i103[0] ≥ 0∧i103[0] + [-1]i102[0] ≥ 0 ⇒ (UIncreasing(COND_LOAD454(&&(&&(&&(>(i102[0], i103[0]), <=(i102[0], i103[0])), <=(i101[0], i102[0])), >=(+(+(i101[0], i102[0]), *(3, i103[0])), 0)), i101[0], i102[0], i103[0])), ≥)∧[(-1)Bound*bni_15] + [(2)bni_15]i103[0] + [(2)bni_15]i102[0] ≥ 0∧[-1 + (-1)bso_16] ≥ 0)



    We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (4)    (i101[0] + i102[0] + [3]i103[0] ≥ 0∧i102[0] + [-1]i101[0] ≥ 0∧i102[0] + [-1] + [-1]i103[0] ≥ 0∧i103[0] + [-1]i102[0] ≥ 0 ⇒ (UIncreasing(COND_LOAD454(&&(&&(&&(>(i102[0], i103[0]), <=(i102[0], i103[0])), <=(i101[0], i102[0])), >=(+(+(i101[0], i102[0]), *(3, i103[0])), 0)), i101[0], i102[0], i103[0])), ≥)∧[(-1)Bound*bni_15] + [(2)bni_15]i103[0] + [(2)bni_15]i102[0] ≥ 0∧[-1 + (-1)bso_16] ≥ 0)



    We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (5)    (i101[0] + i102[0] + [3]i103[0] ≥ 0∧i102[0] + [-1]i101[0] ≥ 0∧i102[0] + [-1] + [-1]i103[0] ≥ 0∧i103[0] + [-1]i102[0] ≥ 0 ⇒ (UIncreasing(COND_LOAD454(&&(&&(&&(>(i102[0], i103[0]), <=(i102[0], i103[0])), <=(i101[0], i102[0])), >=(+(+(i101[0], i102[0]), *(3, i103[0])), 0)), i101[0], i102[0], i103[0])), ≥)∧[(-1)Bound*bni_15] + [(2)bni_15]i103[0] + [(2)bni_15]i102[0] ≥ 0∧[-1 + (-1)bso_16] ≥ 0)



    We solved constraint (5) using rule (IDP_SMT_SPLIT).




For Pair COND_LOAD454(TRUE, i101, i102, i103) → LOAD454(i101, i102, i103) the following chains were created:
  • We consider the chain COND_LOAD454(TRUE, i101[1], i102[1], i103[1]) → LOAD454(i101[1], i102[1], i103[1]), LOAD454(i101[0], i102[0], i103[0]) → COND_LOAD454(&&(&&(&&(>(i102[0], i103[0]), <=(i102[0], i103[0])), <=(i101[0], i102[0])), >=(+(+(i101[0], i102[0]), *(3, i103[0])), 0)), i101[0], i102[0], i103[0]) which results in the following constraint:

    (6)    (i101[1]=i101[0]i103[1]=i103[0]i102[1]=i102[0]COND_LOAD454(TRUE, i101[1], i102[1], i103[1])≥NonInfC∧COND_LOAD454(TRUE, i101[1], i102[1], i103[1])≥LOAD454(i101[1], i102[1], i103[1])∧(UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥))



    We simplified constraint (6) using rule (IV) which results in the following new constraint:

    (7)    (COND_LOAD454(TRUE, i101[1], i102[1], i103[1])≥NonInfC∧COND_LOAD454(TRUE, i101[1], i102[1], i103[1])≥LOAD454(i101[1], i102[1], i103[1])∧(UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥))



    We simplified constraint (7) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (8)    ((UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥)∧[1 + (-1)bso_18] ≥ 0)



    We simplified constraint (8) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (9)    ((UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥)∧[1 + (-1)bso_18] ≥ 0)



    We simplified constraint (9) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (10)    ((UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥)∧[1 + (-1)bso_18] ≥ 0)



    We simplified constraint (10) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (11)    ((UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥)∧0 = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_18] ≥ 0)



  • We consider the chain COND_LOAD454(TRUE, i101[1], i102[1], i103[1]) → LOAD454(i101[1], i102[1], i103[1]), LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2]) which results in the following constraint:

    (12)    (i101[1]=i101[2]i102[1]=i102[2]i103[1]=i103[2]COND_LOAD454(TRUE, i101[1], i102[1], i103[1])≥NonInfC∧COND_LOAD454(TRUE, i101[1], i102[1], i103[1])≥LOAD454(i101[1], i102[1], i103[1])∧(UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥))



    We simplified constraint (12) using rule (IV) which results in the following new constraint:

    (13)    (COND_LOAD454(TRUE, i101[1], i102[1], i103[1])≥NonInfC∧COND_LOAD454(TRUE, i101[1], i102[1], i103[1])≥LOAD454(i101[1], i102[1], i103[1])∧(UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥))



    We simplified constraint (13) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (14)    ((UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥)∧[1 + (-1)bso_18] ≥ 0)



    We simplified constraint (14) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (15)    ((UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥)∧[1 + (-1)bso_18] ≥ 0)



    We simplified constraint (15) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (16)    ((UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥)∧[1 + (-1)bso_18] ≥ 0)



    We simplified constraint (16) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (17)    ((UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥)∧0 = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_18] ≥ 0)



  • We consider the chain COND_LOAD454(TRUE, i101[1], i102[1], i103[1]) → LOAD454(i101[1], i102[1], i103[1]), LOAD454(i101[4], i102[4], i103[4]) → COND_LOAD4542(&&(&&(>(i102[4], i103[4]), <=(i101[4], i102[4])), >=(+(+(i101[4], i102[4]), *(3, i103[4])), 0)), i101[4], i102[4], i103[4]) which results in the following constraint:

    (18)    (i103[1]=i103[4]i102[1]=i102[4]i101[1]=i101[4]COND_LOAD454(TRUE, i101[1], i102[1], i103[1])≥NonInfC∧COND_LOAD454(TRUE, i101[1], i102[1], i103[1])≥LOAD454(i101[1], i102[1], i103[1])∧(UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥))



    We simplified constraint (18) using rule (IV) which results in the following new constraint:

    (19)    (COND_LOAD454(TRUE, i101[1], i102[1], i103[1])≥NonInfC∧COND_LOAD454(TRUE, i101[1], i102[1], i103[1])≥LOAD454(i101[1], i102[1], i103[1])∧(UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥))



    We simplified constraint (19) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (20)    ((UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥)∧[1 + (-1)bso_18] ≥ 0)



    We simplified constraint (20) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (21)    ((UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥)∧[1 + (-1)bso_18] ≥ 0)



    We simplified constraint (21) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (22)    ((UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥)∧[1 + (-1)bso_18] ≥ 0)



    We simplified constraint (22) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (23)    ((UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥)∧0 = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_18] ≥ 0)



  • We consider the chain COND_LOAD454(TRUE, i101[1], i102[1], i103[1]) → LOAD454(i101[1], i102[1], i103[1]), LOAD454(i101[6], i102[6], i103[6]) → COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6]) which results in the following constraint:

    (24)    (i103[1]=i103[6]i101[1]=i101[6]i102[1]=i102[6]COND_LOAD454(TRUE, i101[1], i102[1], i103[1])≥NonInfC∧COND_LOAD454(TRUE, i101[1], i102[1], i103[1])≥LOAD454(i101[1], i102[1], i103[1])∧(UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥))



    We simplified constraint (24) using rule (IV) which results in the following new constraint:

    (25)    (COND_LOAD454(TRUE, i101[1], i102[1], i103[1])≥NonInfC∧COND_LOAD454(TRUE, i101[1], i102[1], i103[1])≥LOAD454(i101[1], i102[1], i103[1])∧(UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥))



    We simplified constraint (25) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (26)    ((UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥)∧[1 + (-1)bso_18] ≥ 0)



    We simplified constraint (26) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (27)    ((UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥)∧[1 + (-1)bso_18] ≥ 0)



    We simplified constraint (27) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (28)    ((UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥)∧[1 + (-1)bso_18] ≥ 0)



    We simplified constraint (28) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (29)    ((UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥)∧0 = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_18] ≥ 0)







For Pair LOAD454(i101, i102, i103) → COND_LOAD4541(&&(&&(<=(i102, i103), <=(i101, i102)), >=(+(+(i101, i102), *(3, i103)), 0)), i101, i102, i103) the following chains were created:
  • We consider the chain LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2]), COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1)) which results in the following constraint:

    (30)    (i102[2]=i102[3]i103[2]=i103[3]i101[2]=i101[3]&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0))=TRUELOAD454(i101[2], i102[2], i103[2])≥NonInfC∧LOAD454(i101[2], i102[2], i103[2])≥COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])∧(UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥))



    We simplified constraint (30) using rules (IV), (IDP_BOOLEAN) which results in the following new constraint:

    (31)    (>=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)=TRUE<=(i102[2], i103[2])=TRUE<=(i101[2], i102[2])=TRUELOAD454(i101[2], i102[2], i103[2])≥NonInfC∧LOAD454(i101[2], i102[2], i103[2])≥COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])∧(UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥))



    We simplified constraint (31) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (32)    (i101[2] + i102[2] + [3]i103[2] ≥ 0∧i103[2] + [-1]i102[2] ≥ 0∧i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(-1)Bound*bni_19] + [(2)bni_19]i103[2] + [(2)bni_19]i102[2] ≥ 0∧[(-1)bso_20] ≥ 0)



    We simplified constraint (32) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (33)    (i101[2] + i102[2] + [3]i103[2] ≥ 0∧i103[2] + [-1]i102[2] ≥ 0∧i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(-1)Bound*bni_19] + [(2)bni_19]i103[2] + [(2)bni_19]i102[2] ≥ 0∧[(-1)bso_20] ≥ 0)



    We simplified constraint (33) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (34)    (i101[2] + i102[2] + [3]i103[2] ≥ 0∧i103[2] + [-1]i102[2] ≥ 0∧i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(-1)Bound*bni_19] + [(2)bni_19]i103[2] + [(2)bni_19]i102[2] ≥ 0∧[(-1)bso_20] ≥ 0)



    We simplified constraint (34) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (35)    (i101[2] ≥ 0∧i103[2] + [-1]i102[2] ≥ 0∧[2]i102[2] + [3]i103[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(-1)Bound*bni_19] + [(2)bni_19]i103[2] + [(2)bni_19]i102[2] ≥ 0∧[(-1)bso_20] ≥ 0)



    We simplified constraint (35) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (36)    (i101[2] ≥ 0∧i102[2] ≥ 0∧[5]i103[2] + [-2]i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(-1)Bound*bni_19] + [(4)bni_19]i103[2] + [(-2)bni_19]i102[2] ≥ 0∧[(-1)bso_20] ≥ 0)







For Pair COND_LOAD4541(TRUE, i101, i102, i103) → LOAD454(+(i101, 1), +(i102, 1), -(i103, 1)) the following chains were created:
  • We consider the chain COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1)) which results in the following constraint:

    (37)    (COND_LOAD4541(TRUE, i101[3], i102[3], i103[3])≥NonInfC∧COND_LOAD4541(TRUE, i101[3], i102[3], i103[3])≥LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))∧(UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥))



    We simplified constraint (37) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (38)    ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧[(-1)bso_22] ≥ 0)



    We simplified constraint (38) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (39)    ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧[(-1)bso_22] ≥ 0)



    We simplified constraint (39) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (40)    ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧[(-1)bso_22] ≥ 0)



    We simplified constraint (40) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (41)    ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧0 = 0∧0 = 0∧0 = 0∧[(-1)bso_22] ≥ 0)







For Pair LOAD454(i101, i102, i103) → COND_LOAD4542(&&(&&(>(i102, i103), <=(i101, i102)), >=(+(+(i101, i102), *(3, i103)), 0)), i101, i102, i103) the following chains were created:
  • We consider the chain LOAD454(i101[4], i102[4], i103[4]) → COND_LOAD4542(&&(&&(>(i102[4], i103[4]), <=(i101[4], i102[4])), >=(+(+(i101[4], i102[4]), *(3, i103[4])), 0)), i101[4], i102[4], i103[4]), COND_LOAD4542(TRUE, i101[5], i102[5], i103[5]) → LOAD454(+(i101[5], 1), +(i102[5], -2), i103[5]) which results in the following constraint:

    (42)    (i101[4]=i101[5]i103[4]=i103[5]i102[4]=i102[5]&&(&&(>(i102[4], i103[4]), <=(i101[4], i102[4])), >=(+(+(i101[4], i102[4]), *(3, i103[4])), 0))=TRUELOAD454(i101[4], i102[4], i103[4])≥NonInfC∧LOAD454(i101[4], i102[4], i103[4])≥COND_LOAD4542(&&(&&(>(i102[4], i103[4]), <=(i101[4], i102[4])), >=(+(+(i101[4], i102[4]), *(3, i103[4])), 0)), i101[4], i102[4], i103[4])∧(UIncreasing(COND_LOAD4542(&&(&&(>(i102[4], i103[4]), <=(i101[4], i102[4])), >=(+(+(i101[4], i102[4]), *(3, i103[4])), 0)), i101[4], i102[4], i103[4])), ≥))



    We simplified constraint (42) using rules (IV), (IDP_BOOLEAN) which results in the following new constraint:

    (43)    (>=(+(+(i101[4], i102[4]), *(3, i103[4])), 0)=TRUE>(i102[4], i103[4])=TRUE<=(i101[4], i102[4])=TRUELOAD454(i101[4], i102[4], i103[4])≥NonInfC∧LOAD454(i101[4], i102[4], i103[4])≥COND_LOAD4542(&&(&&(>(i102[4], i103[4]), <=(i101[4], i102[4])), >=(+(+(i101[4], i102[4]), *(3, i103[4])), 0)), i101[4], i102[4], i103[4])∧(UIncreasing(COND_LOAD4542(&&(&&(>(i102[4], i103[4]), <=(i101[4], i102[4])), >=(+(+(i101[4], i102[4]), *(3, i103[4])), 0)), i101[4], i102[4], i103[4])), ≥))



    We simplified constraint (43) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (44)    (i101[4] + i102[4] + [3]i103[4] ≥ 0∧i102[4] + [-1] + [-1]i103[4] ≥ 0∧i102[4] + [-1]i101[4] ≥ 0 ⇒ (UIncreasing(COND_LOAD4542(&&(&&(>(i102[4], i103[4]), <=(i101[4], i102[4])), >=(+(+(i101[4], i102[4]), *(3, i103[4])), 0)), i101[4], i102[4], i103[4])), ≥)∧[(-1)Bound*bni_23] + [(2)bni_23]i103[4] + [(2)bni_23]i102[4] ≥ 0∧[(-1)bso_24] ≥ 0)



    We simplified constraint (44) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (45)    (i101[4] + i102[4] + [3]i103[4] ≥ 0∧i102[4] + [-1] + [-1]i103[4] ≥ 0∧i102[4] + [-1]i101[4] ≥ 0 ⇒ (UIncreasing(COND_LOAD4542(&&(&&(>(i102[4], i103[4]), <=(i101[4], i102[4])), >=(+(+(i101[4], i102[4]), *(3, i103[4])), 0)), i101[4], i102[4], i103[4])), ≥)∧[(-1)Bound*bni_23] + [(2)bni_23]i103[4] + [(2)bni_23]i102[4] ≥ 0∧[(-1)bso_24] ≥ 0)



    We simplified constraint (45) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (46)    (i101[4] + i102[4] + [3]i103[4] ≥ 0∧i102[4] + [-1] + [-1]i103[4] ≥ 0∧i102[4] + [-1]i101[4] ≥ 0 ⇒ (UIncreasing(COND_LOAD4542(&&(&&(>(i102[4], i103[4]), <=(i101[4], i102[4])), >=(+(+(i101[4], i102[4]), *(3, i103[4])), 0)), i101[4], i102[4], i103[4])), ≥)∧[(-1)Bound*bni_23] + [(2)bni_23]i103[4] + [(2)bni_23]i102[4] ≥ 0∧[(-1)bso_24] ≥ 0)



    We simplified constraint (46) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (47)    (i101[4] ≥ 0∧i102[4] + [-1] + [-1]i103[4] ≥ 0∧[2]i102[4] + [3]i103[4] + [-1]i101[4] ≥ 0 ⇒ (UIncreasing(COND_LOAD4542(&&(&&(>(i102[4], i103[4]), <=(i101[4], i102[4])), >=(+(+(i101[4], i102[4]), *(3, i103[4])), 0)), i101[4], i102[4], i103[4])), ≥)∧[(-1)Bound*bni_23] + [(2)bni_23]i103[4] + [(2)bni_23]i102[4] ≥ 0∧[(-1)bso_24] ≥ 0)



    We simplified constraint (47) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (48)    (i101[4] ≥ 0∧i102[4] ≥ 0∧[2] + [5]i103[4] + [2]i102[4] + [-1]i101[4] ≥ 0 ⇒ (UIncreasing(COND_LOAD4542(&&(&&(>(i102[4], i103[4]), <=(i101[4], i102[4])), >=(+(+(i101[4], i102[4]), *(3, i103[4])), 0)), i101[4], i102[4], i103[4])), ≥)∧[(-1)Bound*bni_23 + (2)bni_23] + [(4)bni_23]i103[4] + [(2)bni_23]i102[4] ≥ 0∧[(-1)bso_24] ≥ 0)



    We simplified constraint (48) using rule (IDP_SMT_SPLIT) which results in the following new constraints:

    (49)    (i101[4] ≥ 0∧i102[4] ≥ 0∧[2] + [5]i103[4] + [2]i102[4] + [-1]i101[4] ≥ 0∧i103[4] ≥ 0 ⇒ (UIncreasing(COND_LOAD4542(&&(&&(>(i102[4], i103[4]), <=(i101[4], i102[4])), >=(+(+(i101[4], i102[4]), *(3, i103[4])), 0)), i101[4], i102[4], i103[4])), ≥)∧[(-1)Bound*bni_23 + (2)bni_23] + [(4)bni_23]i103[4] + [(2)bni_23]i102[4] ≥ 0∧[(-1)bso_24] ≥ 0)


    (50)    (i101[4] ≥ 0∧i102[4] ≥ 0∧[2] + [-5]i103[4] + [2]i102[4] + [-1]i101[4] ≥ 0∧i103[4] ≥ 0 ⇒ (UIncreasing(COND_LOAD4542(&&(&&(>(i102[4], i103[4]), <=(i101[4], i102[4])), >=(+(+(i101[4], i102[4]), *(3, i103[4])), 0)), i101[4], i102[4], i103[4])), ≥)∧[(-1)Bound*bni_23 + (2)bni_23] + [(-4)bni_23]i103[4] + [(2)bni_23]i102[4] ≥ 0∧[(-1)bso_24] ≥ 0)







For Pair COND_LOAD4542(TRUE, i101, i102, i103) → LOAD454(+(i101, 1), +(i102, -2), i103) the following chains were created:
  • We consider the chain COND_LOAD4542(TRUE, i101[5], i102[5], i103[5]) → LOAD454(+(i101[5], 1), +(i102[5], -2), i103[5]) which results in the following constraint:

    (51)    (COND_LOAD4542(TRUE, i101[5], i102[5], i103[5])≥NonInfC∧COND_LOAD4542(TRUE, i101[5], i102[5], i103[5])≥LOAD454(+(i101[5], 1), +(i102[5], -2), i103[5])∧(UIncreasing(LOAD454(+(i101[5], 1), +(i102[5], -2), i103[5])), ≥))



    We simplified constraint (51) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (52)    ((UIncreasing(LOAD454(+(i101[5], 1), +(i102[5], -2), i103[5])), ≥)∧[4 + (-1)bso_26] ≥ 0)



    We simplified constraint (52) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (53)    ((UIncreasing(LOAD454(+(i101[5], 1), +(i102[5], -2), i103[5])), ≥)∧[4 + (-1)bso_26] ≥ 0)



    We simplified constraint (53) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (54)    ((UIncreasing(LOAD454(+(i101[5], 1), +(i102[5], -2), i103[5])), ≥)∧[4 + (-1)bso_26] ≥ 0)



    We simplified constraint (54) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (55)    ((UIncreasing(LOAD454(+(i101[5], 1), +(i102[5], -2), i103[5])), ≥)∧0 = 0∧0 = 0∧0 = 0∧[4 + (-1)bso_26] ≥ 0)







For Pair LOAD454(i101, i102, i103) → COND_LOAD4543(&&(>(i101, i102), >=(+(+(i101, i102), *(3, i103)), 0)), i101, i102, i103) the following chains were created:
  • We consider the chain LOAD454(i101[6], i102[6], i103[6]) → COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6]), COND_LOAD4543(TRUE, i101[7], i102[7], i103[7]) → LOAD454(+(i101[7], -1), i102[7], i103[7]) which results in the following constraint:

    (56)    (&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0))=TRUEi101[6]=i101[7]i102[6]=i102[7]i103[6]=i103[7]LOAD454(i101[6], i102[6], i103[6])≥NonInfC∧LOAD454(i101[6], i102[6], i103[6])≥COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])∧(UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥))



    We simplified constraint (56) using rules (IV), (IDP_BOOLEAN) which results in the following new constraint:

    (57)    (>(i101[6], i102[6])=TRUE>=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)=TRUELOAD454(i101[6], i102[6], i103[6])≥NonInfC∧LOAD454(i101[6], i102[6], i103[6])≥COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])∧(UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥))



    We simplified constraint (57) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (58)    (i101[6] + [-1] + [-1]i102[6] ≥ 0∧i101[6] + i102[6] + [3]i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_27] + [(2)bni_27]i103[6] + [(2)bni_27]i102[6] ≥ 0∧[(-1)bso_28] ≥ 0)



    We simplified constraint (58) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (59)    (i101[6] + [-1] + [-1]i102[6] ≥ 0∧i101[6] + i102[6] + [3]i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_27] + [(2)bni_27]i103[6] + [(2)bni_27]i102[6] ≥ 0∧[(-1)bso_28] ≥ 0)



    We simplified constraint (59) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (60)    (i101[6] + [-1] + [-1]i102[6] ≥ 0∧i101[6] + i102[6] + [3]i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_27] + [(2)bni_27]i103[6] + [(2)bni_27]i102[6] ≥ 0∧[(-1)bso_28] ≥ 0)



    We simplified constraint (60) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (61)    (i101[6] ≥ 0∧[1] + [2]i102[6] + i101[6] + [3]i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_27] + [(2)bni_27]i103[6] + [(2)bni_27]i102[6] ≥ 0∧[(-1)bso_28] ≥ 0)



    We simplified constraint (61) using rule (IDP_SMT_SPLIT) which results in the following new constraints:

    (62)    (i101[6] ≥ 0∧[1] + [2]i102[6] + i101[6] + [3]i103[6] ≥ 0∧i102[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_27] + [(2)bni_27]i103[6] + [(2)bni_27]i102[6] ≥ 0∧[(-1)bso_28] ≥ 0)


    (63)    (i101[6] ≥ 0∧[1] + [-2]i102[6] + i101[6] + [3]i103[6] ≥ 0∧i102[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_27] + [(2)bni_27]i103[6] + [(-2)bni_27]i102[6] ≥ 0∧[(-1)bso_28] ≥ 0)



    We simplified constraint (62) using rule (IDP_SMT_SPLIT) which results in the following new constraints:

    (64)    (i101[6] ≥ 0∧[1] + [2]i102[6] + i101[6] + [3]i103[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_27] + [(2)bni_27]i103[6] + [(2)bni_27]i102[6] ≥ 0∧[(-1)bso_28] ≥ 0)


    (65)    (i101[6] ≥ 0∧[1] + [2]i102[6] + i101[6] + [-3]i103[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_27] + [(-2)bni_27]i103[6] + [(2)bni_27]i102[6] ≥ 0∧[(-1)bso_28] ≥ 0)



    We simplified constraint (63) using rule (IDP_SMT_SPLIT) which results in the following new constraints:

    (66)    (i101[6] ≥ 0∧[1] + [-2]i102[6] + i101[6] + [3]i103[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_27] + [(2)bni_27]i103[6] + [(-2)bni_27]i102[6] ≥ 0∧[(-1)bso_28] ≥ 0)


    (67)    (i101[6] ≥ 0∧[1] + [-2]i102[6] + i101[6] + [-3]i103[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_27] + [(-2)bni_27]i103[6] + [(-2)bni_27]i102[6] ≥ 0∧[(-1)bso_28] ≥ 0)



    We simplified constraint (64) using rule (IDP_POLY_GCD) which results in the following new constraint:

    (68)    (i101[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0∧i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_27] + [(2)bni_27]i103[6] + [(2)bni_27]i102[6] ≥ 0∧[(-1)bso_28] ≥ 0)



    We simplified constraint (65) using rule (IDP_POLY_GCD) which results in the following new constraint:

    (69)    (i101[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0∧[-1]i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_27] + [(-2)bni_27]i103[6] + [(2)bni_27]i102[6] ≥ 0∧[(-1)bso_28] ≥ 0)



    We simplified constraint (66) using rule (IDP_POLY_GCD) which results in the following new constraint:

    (70)    (i101[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0∧i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_27] + [(2)bni_27]i103[6] + [(-2)bni_27]i102[6] ≥ 0∧[(-1)bso_28] ≥ 0)



    We simplified constraint (67) using rule (IDP_POLY_GCD) which results in the following new constraint:

    (71)    (i101[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0∧[-1]i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_27] + [(-2)bni_27]i103[6] + [(-2)bni_27]i102[6] ≥ 0∧[(-1)bso_28] ≥ 0)







For Pair COND_LOAD4543(TRUE, i101, i102, i103) → LOAD454(+(i101, -1), i102, i103) the following chains were created:
  • We consider the chain COND_LOAD4543(TRUE, i101[7], i102[7], i103[7]) → LOAD454(+(i101[7], -1), i102[7], i103[7]) which results in the following constraint:

    (72)    (COND_LOAD4543(TRUE, i101[7], i102[7], i103[7])≥NonInfC∧COND_LOAD4543(TRUE, i101[7], i102[7], i103[7])≥LOAD454(+(i101[7], -1), i102[7], i103[7])∧(UIncreasing(LOAD454(+(i101[7], -1), i102[7], i103[7])), ≥))



    We simplified constraint (72) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (73)    ((UIncreasing(LOAD454(+(i101[7], -1), i102[7], i103[7])), ≥)∧[(-1)bso_30] ≥ 0)



    We simplified constraint (73) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (74)    ((UIncreasing(LOAD454(+(i101[7], -1), i102[7], i103[7])), ≥)∧[(-1)bso_30] ≥ 0)



    We simplified constraint (74) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (75)    ((UIncreasing(LOAD454(+(i101[7], -1), i102[7], i103[7])), ≥)∧[(-1)bso_30] ≥ 0)



    We simplified constraint (75) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (76)    ((UIncreasing(LOAD454(+(i101[7], -1), i102[7], i103[7])), ≥)∧0 = 0∧0 = 0∧0 = 0∧[(-1)bso_30] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • LOAD454(i101, i102, i103) → COND_LOAD454(&&(&&(&&(>(i102, i103), <=(i102, i103)), <=(i101, i102)), >=(+(+(i101, i102), *(3, i103)), 0)), i101, i102, i103)

  • COND_LOAD454(TRUE, i101, i102, i103) → LOAD454(i101, i102, i103)
    • ((UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥)∧0 = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_18] ≥ 0)
    • ((UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥)∧0 = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_18] ≥ 0)
    • ((UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥)∧0 = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_18] ≥ 0)
    • ((UIncreasing(LOAD454(i101[1], i102[1], i103[1])), ≥)∧0 = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_18] ≥ 0)

  • LOAD454(i101, i102, i103) → COND_LOAD4541(&&(&&(<=(i102, i103), <=(i101, i102)), >=(+(+(i101, i102), *(3, i103)), 0)), i101, i102, i103)
    • (i101[2] ≥ 0∧i102[2] ≥ 0∧[5]i103[2] + [-2]i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(-1)Bound*bni_19] + [(4)bni_19]i103[2] + [(-2)bni_19]i102[2] ≥ 0∧[(-1)bso_20] ≥ 0)

  • COND_LOAD4541(TRUE, i101, i102, i103) → LOAD454(+(i101, 1), +(i102, 1), -(i103, 1))
    • ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧0 = 0∧0 = 0∧0 = 0∧[(-1)bso_22] ≥ 0)

  • LOAD454(i101, i102, i103) → COND_LOAD4542(&&(&&(>(i102, i103), <=(i101, i102)), >=(+(+(i101, i102), *(3, i103)), 0)), i101, i102, i103)
    • (i101[4] ≥ 0∧i102[4] ≥ 0∧[2] + [5]i103[4] + [2]i102[4] + [-1]i101[4] ≥ 0∧i103[4] ≥ 0 ⇒ (UIncreasing(COND_LOAD4542(&&(&&(>(i102[4], i103[4]), <=(i101[4], i102[4])), >=(+(+(i101[4], i102[4]), *(3, i103[4])), 0)), i101[4], i102[4], i103[4])), ≥)∧[(-1)Bound*bni_23 + (2)bni_23] + [(4)bni_23]i103[4] + [(2)bni_23]i102[4] ≥ 0∧[(-1)bso_24] ≥ 0)
    • (i101[4] ≥ 0∧i102[4] ≥ 0∧[2] + [-5]i103[4] + [2]i102[4] + [-1]i101[4] ≥ 0∧i103[4] ≥ 0 ⇒ (UIncreasing(COND_LOAD4542(&&(&&(>(i102[4], i103[4]), <=(i101[4], i102[4])), >=(+(+(i101[4], i102[4]), *(3, i103[4])), 0)), i101[4], i102[4], i103[4])), ≥)∧[(-1)Bound*bni_23 + (2)bni_23] + [(-4)bni_23]i103[4] + [(2)bni_23]i102[4] ≥ 0∧[(-1)bso_24] ≥ 0)

  • COND_LOAD4542(TRUE, i101, i102, i103) → LOAD454(+(i101, 1), +(i102, -2), i103)
    • ((UIncreasing(LOAD454(+(i101[5], 1), +(i102[5], -2), i103[5])), ≥)∧0 = 0∧0 = 0∧0 = 0∧[4 + (-1)bso_26] ≥ 0)

  • LOAD454(i101, i102, i103) → COND_LOAD4543(&&(>(i101, i102), >=(+(+(i101, i102), *(3, i103)), 0)), i101, i102, i103)
    • (i101[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0∧i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_27] + [(2)bni_27]i103[6] + [(2)bni_27]i102[6] ≥ 0∧[(-1)bso_28] ≥ 0)
    • (i101[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0∧[-1]i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_27] + [(-2)bni_27]i103[6] + [(2)bni_27]i102[6] ≥ 0∧[(-1)bso_28] ≥ 0)
    • (i101[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0∧i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_27] + [(2)bni_27]i103[6] + [(-2)bni_27]i102[6] ≥ 0∧[(-1)bso_28] ≥ 0)
    • (i101[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0∧[-1]i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_27] + [(-2)bni_27]i103[6] + [(-2)bni_27]i102[6] ≥ 0∧[(-1)bso_28] ≥ 0)

  • COND_LOAD4543(TRUE, i101, i102, i103) → LOAD454(+(i101, -1), i102, i103)
    • ((UIncreasing(LOAD454(+(i101[7], -1), i102[7], i103[7])), ≥)∧0 = 0∧0 = 0∧0 = 0∧[(-1)bso_30] ≥ 0)




The constraints for P> respective Pbound are constructed from P where we just replace every occurence of "t ≥ s" in P by "t > s" respective "t ≥ c". Here c stands for the fresh constant used for Pbound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:

POL(TRUE) = 0   
POL(FALSE) = 0   
POL(LOAD454(x1, x2, x3)) = [2]x3 + [2]x2   
POL(COND_LOAD454(x1, x2, x3, x4)) = [1] + [2]x4 + [2]x3   
POL(&&(x1, x2)) = [-1]   
POL(>(x1, x2)) = [-1]   
POL(<=(x1, x2)) = [-1]   
POL(>=(x1, x2)) = [-1]   
POL(+(x1, x2)) = x1 + x2   
POL(*(x1, x2)) = x1·x2   
POL(3) = [3]   
POL(0) = 0   
POL(COND_LOAD4541(x1, x2, x3, x4)) = [2]x4 + [2]x3   
POL(1) = [1]   
POL(-(x1, x2)) = x1 + [-1]x2   
POL(COND_LOAD4542(x1, x2, x3, x4)) = [2]x4 + [2]x3   
POL(-2) = [-2]   
POL(COND_LOAD4543(x1, x2, x3, x4)) = [2]x4 + [2]x3   
POL(-1) = [-1]   

The following pairs are in P>:

LOAD454(i101[0], i102[0], i103[0]) → COND_LOAD454(&&(&&(&&(>(i102[0], i103[0]), <=(i102[0], i103[0])), <=(i101[0], i102[0])), >=(+(+(i101[0], i102[0]), *(3, i103[0])), 0)), i101[0], i102[0], i103[0])
COND_LOAD454(TRUE, i101[1], i102[1], i103[1]) → LOAD454(i101[1], i102[1], i103[1])
COND_LOAD4542(TRUE, i101[5], i102[5], i103[5]) → LOAD454(+(i101[5], 1), +(i102[5], -2), i103[5])

The following pairs are in Pbound:

LOAD454(i101[0], i102[0], i103[0]) → COND_LOAD454(&&(&&(&&(>(i102[0], i103[0]), <=(i102[0], i103[0])), <=(i101[0], i102[0])), >=(+(+(i101[0], i102[0]), *(3, i103[0])), 0)), i101[0], i102[0], i103[0])
LOAD454(i101[4], i102[4], i103[4]) → COND_LOAD4542(&&(&&(>(i102[4], i103[4]), <=(i101[4], i102[4])), >=(+(+(i101[4], i102[4]), *(3, i103[4])), 0)), i101[4], i102[4], i103[4])

The following pairs are in P:

LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])
COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))
LOAD454(i101[4], i102[4], i103[4]) → COND_LOAD4542(&&(&&(>(i102[4], i103[4]), <=(i101[4], i102[4])), >=(+(+(i101[4], i102[4]), *(3, i103[4])), 0)), i101[4], i102[4], i103[4])
LOAD454(i101[6], i102[6], i103[6]) → COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])
COND_LOAD4543(TRUE, i101[7], i102[7], i103[7]) → LOAD454(+(i101[7], -1), i102[7], i103[7])

There are no usable rules.

(10) Complex Obligation (AND)

(11) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Boolean, Integer


R is empty.

The integer pair graph contains the following rules and edges:
(2): LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(i102[2] <= i103[2] && i101[2] <= i102[2] && i101[2] + i102[2] + 3 * i103[2] >= 0, i101[2], i102[2], i103[2])
(3): COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(i101[3] + 1, i102[3] + 1, i103[3] - 1)
(4): LOAD454(i101[4], i102[4], i103[4]) → COND_LOAD4542(i102[4] > i103[4] && i101[4] <= i102[4] && i101[4] + i102[4] + 3 * i103[4] >= 0, i101[4], i102[4], i103[4])
(6): LOAD454(i101[6], i102[6], i103[6]) → COND_LOAD4543(i101[6] > i102[6] && i101[6] + i102[6] + 3 * i103[6] >= 0, i101[6], i102[6], i103[6])
(7): COND_LOAD4543(TRUE, i101[7], i102[7], i103[7]) → LOAD454(i101[7] + -1, i102[7], i103[7])

(3) -> (2), if ((i101[3] + 1* i101[2])∧(i103[3] - 1* i103[2])∧(i102[3] + 1* i102[2]))


(7) -> (2), if ((i101[7] + -1* i101[2])∧(i102[7]* i102[2])∧(i103[7]* i103[2]))


(2) -> (3), if ((i102[2]* i102[3])∧(i103[2]* i103[3])∧(i101[2]* i101[3])∧(i102[2] <= i103[2] && i101[2] <= i102[2] && i101[2] + i102[2] + 3 * i103[2] >= 0* TRUE))


(3) -> (4), if ((i103[3] - 1* i103[4])∧(i101[3] + 1* i101[4])∧(i102[3] + 1* i102[4]))


(7) -> (4), if ((i103[7]* i103[4])∧(i101[7] + -1* i101[4])∧(i102[7]* i102[4]))


(3) -> (6), if ((i101[3] + 1* i101[6])∧(i103[3] - 1* i103[6])∧(i102[3] + 1* i102[6]))


(7) -> (6), if ((i102[7]* i102[6])∧(i101[7] + -1* i101[6])∧(i103[7]* i103[6]))


(6) -> (7), if ((i101[6] > i102[6] && i101[6] + i102[6] + 3 * i103[6] >= 0* TRUE)∧(i101[6]* i101[7])∧(i102[6]* i102[7])∧(i103[6]* i103[7]))



The set Q consists of the following terms:
Load454(x0, x1, x2)
Cond_Load454(TRUE, x0, x1, x2)
Cond_Load4541(TRUE, x0, x1, x2)
Cond_Load4542(TRUE, x0, x1, x2)
Cond_Load4543(TRUE, x0, x1, x2)

(12) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node.

(13) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Integer, Boolean


R is empty.

The integer pair graph contains the following rules and edges:
(7): COND_LOAD4543(TRUE, i101[7], i102[7], i103[7]) → LOAD454(i101[7] + -1, i102[7], i103[7])
(6): LOAD454(i101[6], i102[6], i103[6]) → COND_LOAD4543(i101[6] > i102[6] && i101[6] + i102[6] + 3 * i103[6] >= 0, i101[6], i102[6], i103[6])
(3): COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(i101[3] + 1, i102[3] + 1, i103[3] - 1)
(2): LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(i102[2] <= i103[2] && i101[2] <= i102[2] && i101[2] + i102[2] + 3 * i103[2] >= 0, i101[2], i102[2], i103[2])

(3) -> (2), if ((i101[3] + 1* i101[2])∧(i103[3] - 1* i103[2])∧(i102[3] + 1* i102[2]))


(7) -> (2), if ((i101[7] + -1* i101[2])∧(i102[7]* i102[2])∧(i103[7]* i103[2]))


(2) -> (3), if ((i102[2]* i102[3])∧(i103[2]* i103[3])∧(i101[2]* i101[3])∧(i102[2] <= i103[2] && i101[2] <= i102[2] && i101[2] + i102[2] + 3 * i103[2] >= 0* TRUE))


(3) -> (6), if ((i101[3] + 1* i101[6])∧(i103[3] - 1* i103[6])∧(i102[3] + 1* i102[6]))


(7) -> (6), if ((i102[7]* i102[6])∧(i101[7] + -1* i101[6])∧(i103[7]* i103[6]))


(6) -> (7), if ((i101[6] > i102[6] && i101[6] + i102[6] + 3 * i103[6] >= 0* TRUE)∧(i101[6]* i101[7])∧(i102[6]* i102[7])∧(i103[6]* i103[7]))



The set Q consists of the following terms:
Load454(x0, x1, x2)
Cond_Load454(TRUE, x0, x1, x2)
Cond_Load4541(TRUE, x0, x1, x2)
Cond_Load4542(TRUE, x0, x1, x2)
Cond_Load4543(TRUE, x0, x1, x2)

(14) IDPNonInfProof (SOUND transformation)

The constraints were generated the following way:
The DP Problem is simplified using the Induction Calculus [NONINF] with the following steps:
Note that final constraints are written in bold face.


For Pair COND_LOAD4543(TRUE, i101[7], i102[7], i103[7]) → LOAD454(+(i101[7], -1), i102[7], i103[7]) the following chains were created:
  • We consider the chain COND_LOAD4543(TRUE, i101[7], i102[7], i103[7]) → LOAD454(+(i101[7], -1), i102[7], i103[7]) which results in the following constraint:

    (1)    (COND_LOAD4543(TRUE, i101[7], i102[7], i103[7])≥NonInfC∧COND_LOAD4543(TRUE, i101[7], i102[7], i103[7])≥LOAD454(+(i101[7], -1), i102[7], i103[7])∧(UIncreasing(LOAD454(+(i101[7], -1), i102[7], i103[7])), ≥))



    We simplified constraint (1) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (2)    ((UIncreasing(LOAD454(+(i101[7], -1), i102[7], i103[7])), ≥)∧[1 + (-1)bso_14] ≥ 0)



    We simplified constraint (2) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (3)    ((UIncreasing(LOAD454(+(i101[7], -1), i102[7], i103[7])), ≥)∧[1 + (-1)bso_14] ≥ 0)



    We simplified constraint (3) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (4)    ((UIncreasing(LOAD454(+(i101[7], -1), i102[7], i103[7])), ≥)∧[1 + (-1)bso_14] ≥ 0)



    We simplified constraint (4) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (5)    ((UIncreasing(LOAD454(+(i101[7], -1), i102[7], i103[7])), ≥)∧0 = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_14] ≥ 0)







For Pair LOAD454(i101[6], i102[6], i103[6]) → COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6]) the following chains were created:
  • We consider the chain LOAD454(i101[6], i102[6], i103[6]) → COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6]), COND_LOAD4543(TRUE, i101[7], i102[7], i103[7]) → LOAD454(+(i101[7], -1), i102[7], i103[7]) which results in the following constraint:

    (6)    (&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0))=TRUEi101[6]=i101[7]i102[6]=i102[7]i103[6]=i103[7]LOAD454(i101[6], i102[6], i103[6])≥NonInfC∧LOAD454(i101[6], i102[6], i103[6])≥COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])∧(UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥))



    We simplified constraint (6) using rules (IV), (IDP_BOOLEAN) which results in the following new constraint:

    (7)    (>(i101[6], i102[6])=TRUE>=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)=TRUELOAD454(i101[6], i102[6], i103[6])≥NonInfC∧LOAD454(i101[6], i102[6], i103[6])≥COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])∧(UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥))



    We simplified constraint (7) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (8)    (i101[6] + [-1] + [-1]i102[6] ≥ 0∧i101[6] + i102[6] + [3]i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)bni_15 + (-1)Bound*bni_15] + [bni_15]i101[6] + [(-1)bni_15]i102[6] ≥ 0∧[(-1)bso_16] ≥ 0)



    We simplified constraint (8) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (9)    (i101[6] + [-1] + [-1]i102[6] ≥ 0∧i101[6] + i102[6] + [3]i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)bni_15 + (-1)Bound*bni_15] + [bni_15]i101[6] + [(-1)bni_15]i102[6] ≥ 0∧[(-1)bso_16] ≥ 0)



    We simplified constraint (9) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (10)    (i101[6] + [-1] + [-1]i102[6] ≥ 0∧i101[6] + i102[6] + [3]i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)bni_15 + (-1)Bound*bni_15] + [bni_15]i101[6] + [(-1)bni_15]i102[6] ≥ 0∧[(-1)bso_16] ≥ 0)



    We simplified constraint (10) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (11)    (i101[6] ≥ 0∧[1] + [2]i102[6] + i101[6] + [3]i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_15] + [bni_15]i101[6] ≥ 0∧[(-1)bso_16] ≥ 0)



    We simplified constraint (11) using rule (IDP_SMT_SPLIT) which results in the following new constraints:

    (12)    (i101[6] ≥ 0∧[1] + [2]i102[6] + i101[6] + [3]i103[6] ≥ 0∧i102[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_15] + [bni_15]i101[6] ≥ 0∧[(-1)bso_16] ≥ 0)


    (13)    (i101[6] ≥ 0∧[1] + [-2]i102[6] + i101[6] + [3]i103[6] ≥ 0∧i102[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_15] + [bni_15]i101[6] ≥ 0∧[(-1)bso_16] ≥ 0)



    We simplified constraint (12) using rule (IDP_SMT_SPLIT) which results in the following new constraints:

    (14)    (i101[6] ≥ 0∧[1] + [2]i102[6] + i101[6] + [3]i103[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_15] + [bni_15]i101[6] ≥ 0∧[(-1)bso_16] ≥ 0)


    (15)    (i101[6] ≥ 0∧[1] + [2]i102[6] + i101[6] + [-3]i103[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_15] + [bni_15]i101[6] ≥ 0∧[(-1)bso_16] ≥ 0)



    We simplified constraint (13) using rule (IDP_SMT_SPLIT) which results in the following new constraints:

    (16)    (i101[6] ≥ 0∧[1] + [-2]i102[6] + i101[6] + [3]i103[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_15] + [bni_15]i101[6] ≥ 0∧[(-1)bso_16] ≥ 0)


    (17)    (i101[6] ≥ 0∧[1] + [-2]i102[6] + i101[6] + [-3]i103[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_15] + [bni_15]i101[6] ≥ 0∧[(-1)bso_16] ≥ 0)



    We simplified constraint (14) using rule (IDP_POLY_GCD) which results in the following new constraint:

    (18)    (i101[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0∧i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_15] + [bni_15]i101[6] ≥ 0∧[(-1)bso_16] ≥ 0)



    We simplified constraint (15) using rule (IDP_POLY_GCD) which results in the following new constraint:

    (19)    (i101[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0∧[-1]i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_15] + [bni_15]i101[6] ≥ 0∧[(-1)bso_16] ≥ 0)



    We simplified constraint (16) using rule (IDP_POLY_GCD) which results in the following new constraint:

    (20)    (i101[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0∧i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_15] + [bni_15]i101[6] ≥ 0∧[(-1)bso_16] ≥ 0)



    We simplified constraint (17) using rule (IDP_POLY_GCD) which results in the following new constraint:

    (21)    (i101[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0∧[-1]i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_15] + [bni_15]i101[6] ≥ 0∧[(-1)bso_16] ≥ 0)







For Pair COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1)) the following chains were created:
  • We consider the chain COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1)) which results in the following constraint:

    (22)    (COND_LOAD4541(TRUE, i101[3], i102[3], i103[3])≥NonInfC∧COND_LOAD4541(TRUE, i101[3], i102[3], i103[3])≥LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))∧(UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥))



    We simplified constraint (22) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (23)    ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧[(-1)bso_18] ≥ 0)



    We simplified constraint (23) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (24)    ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧[(-1)bso_18] ≥ 0)



    We simplified constraint (24) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (25)    ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧[(-1)bso_18] ≥ 0)



    We simplified constraint (25) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (26)    ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧0 = 0∧0 = 0∧0 = 0∧[(-1)bso_18] ≥ 0)







For Pair LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2]) the following chains were created:
  • We consider the chain LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2]), COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1)) which results in the following constraint:

    (27)    (i102[2]=i102[3]i103[2]=i103[3]i101[2]=i101[3]&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0))=TRUELOAD454(i101[2], i102[2], i103[2])≥NonInfC∧LOAD454(i101[2], i102[2], i103[2])≥COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])∧(UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥))



    We simplified constraint (27) using rules (IV), (IDP_BOOLEAN) which results in the following new constraint:

    (28)    (>=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)=TRUE<=(i102[2], i103[2])=TRUE<=(i101[2], i102[2])=TRUELOAD454(i101[2], i102[2], i103[2])≥NonInfC∧LOAD454(i101[2], i102[2], i103[2])≥COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])∧(UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥))



    We simplified constraint (28) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (29)    (i101[2] + i102[2] + [3]i103[2] ≥ 0∧i103[2] + [-1]i102[2] ≥ 0∧i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(-1)bni_19 + (-1)Bound*bni_19] + [bni_19]i101[2] + [(-1)bni_19]i102[2] ≥ 0∧[(-1)bso_20] ≥ 0)



    We simplified constraint (29) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (30)    (i101[2] + i102[2] + [3]i103[2] ≥ 0∧i103[2] + [-1]i102[2] ≥ 0∧i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(-1)bni_19 + (-1)Bound*bni_19] + [bni_19]i101[2] + [(-1)bni_19]i102[2] ≥ 0∧[(-1)bso_20] ≥ 0)



    We simplified constraint (30) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (31)    (i101[2] + i102[2] + [3]i103[2] ≥ 0∧i103[2] + [-1]i102[2] ≥ 0∧i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(-1)bni_19 + (-1)Bound*bni_19] + [bni_19]i101[2] + [(-1)bni_19]i102[2] ≥ 0∧[(-1)bso_20] ≥ 0)



    We simplified constraint (31) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (32)    (i101[2] ≥ 0∧i103[2] + [-1]i102[2] ≥ 0∧[2]i102[2] + [3]i103[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(-1)bni_19 + (-1)Bound*bni_19] + [(-2)bni_19]i102[2] + [(-3)bni_19]i103[2] + [bni_19]i101[2] ≥ 0∧[(-1)bso_20] ≥ 0)



    We simplified constraint (32) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (33)    (i101[2] ≥ 0∧i102[2] ≥ 0∧[5]i103[2] + [-2]i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(-1)bni_19 + (-1)Bound*bni_19] + [(-5)bni_19]i103[2] + [(2)bni_19]i102[2] + [bni_19]i101[2] ≥ 0∧[(-1)bso_20] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • COND_LOAD4543(TRUE, i101[7], i102[7], i103[7]) → LOAD454(+(i101[7], -1), i102[7], i103[7])
    • ((UIncreasing(LOAD454(+(i101[7], -1), i102[7], i103[7])), ≥)∧0 = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_14] ≥ 0)

  • LOAD454(i101[6], i102[6], i103[6]) → COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])
    • (i101[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0∧i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_15] + [bni_15]i101[6] ≥ 0∧[(-1)bso_16] ≥ 0)
    • (i101[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0∧[-1]i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_15] + [bni_15]i101[6] ≥ 0∧[(-1)bso_16] ≥ 0)
    • (i101[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0∧i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_15] + [bni_15]i101[6] ≥ 0∧[(-1)bso_16] ≥ 0)
    • (i101[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0∧[-1]i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_15] + [bni_15]i101[6] ≥ 0∧[(-1)bso_16] ≥ 0)

  • COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))
    • ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧0 = 0∧0 = 0∧0 = 0∧[(-1)bso_18] ≥ 0)

  • LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])
    • (i101[2] ≥ 0∧i102[2] ≥ 0∧[5]i103[2] + [-2]i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(-1)bni_19 + (-1)Bound*bni_19] + [(-5)bni_19]i103[2] + [(2)bni_19]i102[2] + [bni_19]i101[2] ≥ 0∧[(-1)bso_20] ≥ 0)




The constraints for P> respective Pbound are constructed from P where we just replace every occurence of "t ≥ s" in P by "t > s" respective "t ≥ c". Here c stands for the fresh constant used for Pbound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:

POL(TRUE) = 0   
POL(FALSE) = 0   
POL(COND_LOAD4543(x1, x2, x3, x4)) = [-1] + [-1]x3 + x2   
POL(LOAD454(x1, x2, x3)) = [-1] + x1 + [-1]x2   
POL(+(x1, x2)) = x1 + x2   
POL(-1) = [-1]   
POL(&&(x1, x2)) = [-1]   
POL(>(x1, x2)) = [-1]   
POL(>=(x1, x2)) = [-1]   
POL(*(x1, x2)) = x1·x2   
POL(3) = [3]   
POL(0) = 0   
POL(COND_LOAD4541(x1, x2, x3, x4)) = [-1] + [-1]x3 + x2   
POL(1) = [1]   
POL(-(x1, x2)) = x1 + [-1]x2   
POL(<=(x1, x2)) = [-1]   

The following pairs are in P>:

COND_LOAD4543(TRUE, i101[7], i102[7], i103[7]) → LOAD454(+(i101[7], -1), i102[7], i103[7])

The following pairs are in Pbound:

LOAD454(i101[6], i102[6], i103[6]) → COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])

The following pairs are in P:

LOAD454(i101[6], i102[6], i103[6]) → COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])
COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))
LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])

There are no usable rules.

(15) Complex Obligation (AND)

(16) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Boolean, Integer


R is empty.

The integer pair graph contains the following rules and edges:
(6): LOAD454(i101[6], i102[6], i103[6]) → COND_LOAD4543(i101[6] > i102[6] && i101[6] + i102[6] + 3 * i103[6] >= 0, i101[6], i102[6], i103[6])
(3): COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(i101[3] + 1, i102[3] + 1, i103[3] - 1)
(2): LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(i102[2] <= i103[2] && i101[2] <= i102[2] && i101[2] + i102[2] + 3 * i103[2] >= 0, i101[2], i102[2], i103[2])

(3) -> (2), if ((i101[3] + 1* i101[2])∧(i103[3] - 1* i103[2])∧(i102[3] + 1* i102[2]))


(2) -> (3), if ((i102[2]* i102[3])∧(i103[2]* i103[3])∧(i101[2]* i101[3])∧(i102[2] <= i103[2] && i101[2] <= i102[2] && i101[2] + i102[2] + 3 * i103[2] >= 0* TRUE))


(3) -> (6), if ((i101[3] + 1* i101[6])∧(i103[3] - 1* i103[6])∧(i102[3] + 1* i102[6]))



The set Q consists of the following terms:
Load454(x0, x1, x2)
Cond_Load454(TRUE, x0, x1, x2)
Cond_Load4541(TRUE, x0, x1, x2)
Cond_Load4542(TRUE, x0, x1, x2)
Cond_Load4543(TRUE, x0, x1, x2)

(17) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node.

(18) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Boolean, Integer


R is empty.

The integer pair graph contains the following rules and edges:
(2): LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(i102[2] <= i103[2] && i101[2] <= i102[2] && i101[2] + i102[2] + 3 * i103[2] >= 0, i101[2], i102[2], i103[2])
(3): COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(i101[3] + 1, i102[3] + 1, i103[3] - 1)

(3) -> (2), if ((i101[3] + 1* i101[2])∧(i103[3] - 1* i103[2])∧(i102[3] + 1* i102[2]))


(2) -> (3), if ((i102[2]* i102[3])∧(i103[2]* i103[3])∧(i101[2]* i101[3])∧(i102[2] <= i103[2] && i101[2] <= i102[2] && i101[2] + i102[2] + 3 * i103[2] >= 0* TRUE))



The set Q consists of the following terms:
Load454(x0, x1, x2)
Cond_Load454(TRUE, x0, x1, x2)
Cond_Load4541(TRUE, x0, x1, x2)
Cond_Load4542(TRUE, x0, x1, x2)
Cond_Load4543(TRUE, x0, x1, x2)

(19) IDPNonInfProof (SOUND transformation)

The constraints were generated the following way:
The DP Problem is simplified using the Induction Calculus [NONINF] with the following steps:
Note that final constraints are written in bold face.


For Pair LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2]) the following chains were created:
  • We consider the chain LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2]), COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1)) which results in the following constraint:

    (1)    (i102[2]=i102[3]i103[2]=i103[3]i101[2]=i101[3]&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0))=TRUELOAD454(i101[2], i102[2], i103[2])≥NonInfC∧LOAD454(i101[2], i102[2], i103[2])≥COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])∧(UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥))



    We simplified constraint (1) using rules (IV), (IDP_BOOLEAN) which results in the following new constraint:

    (2)    (>=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)=TRUE<=(i102[2], i103[2])=TRUE<=(i101[2], i102[2])=TRUELOAD454(i101[2], i102[2], i103[2])≥NonInfC∧LOAD454(i101[2], i102[2], i103[2])≥COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])∧(UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥))



    We simplified constraint (2) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (3)    (i101[2] + i102[2] + [3]i103[2] ≥ 0∧i103[2] + [-1]i102[2] ≥ 0∧i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(2)bni_8 + (-1)Bound*bni_8] + [bni_8]i103[2] + [(-1)bni_8]i101[2] ≥ 0∧[1 + (-1)bso_9] ≥ 0)



    We simplified constraint (3) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (4)    (i101[2] + i102[2] + [3]i103[2] ≥ 0∧i103[2] + [-1]i102[2] ≥ 0∧i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(2)bni_8 + (-1)Bound*bni_8] + [bni_8]i103[2] + [(-1)bni_8]i101[2] ≥ 0∧[1 + (-1)bso_9] ≥ 0)



    We simplified constraint (4) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (5)    (i101[2] + i102[2] + [3]i103[2] ≥ 0∧i103[2] + [-1]i102[2] ≥ 0∧i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(2)bni_8 + (-1)Bound*bni_8] + [bni_8]i103[2] + [(-1)bni_8]i101[2] ≥ 0∧[1 + (-1)bso_9] ≥ 0)



    We simplified constraint (5) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (6)    (i101[2] ≥ 0∧i103[2] + [-1]i102[2] ≥ 0∧[2]i102[2] + [3]i103[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(2)bni_8 + (-1)Bound*bni_8] + [(4)bni_8]i103[2] + [bni_8]i102[2] + [(-1)bni_8]i101[2] ≥ 0∧[1 + (-1)bso_9] ≥ 0)



    We simplified constraint (6) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (7)    (i101[2] ≥ 0∧i102[2] ≥ 0∧[5]i103[2] + [-2]i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(2)bni_8 + (-1)Bound*bni_8] + [(5)bni_8]i103[2] + [(-1)bni_8]i102[2] + [(-1)bni_8]i101[2] ≥ 0∧[1 + (-1)bso_9] ≥ 0)







For Pair COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1)) the following chains were created:
  • We consider the chain COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1)) which results in the following constraint:

    (8)    (COND_LOAD4541(TRUE, i101[3], i102[3], i103[3])≥NonInfC∧COND_LOAD4541(TRUE, i101[3], i102[3], i103[3])≥LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))∧(UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥))



    We simplified constraint (8) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (9)    ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧[1 + (-1)bso_11] ≥ 0)



    We simplified constraint (9) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (10)    ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧[1 + (-1)bso_11] ≥ 0)



    We simplified constraint (10) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (11)    ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧[1 + (-1)bso_11] ≥ 0)



    We simplified constraint (11) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (12)    ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧0 = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_11] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])
    • (i101[2] ≥ 0∧i102[2] ≥ 0∧[5]i103[2] + [-2]i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(2)bni_8 + (-1)Bound*bni_8] + [(5)bni_8]i103[2] + [(-1)bni_8]i102[2] + [(-1)bni_8]i101[2] ≥ 0∧[1 + (-1)bso_9] ≥ 0)

  • COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))
    • ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧0 = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_11] ≥ 0)




The constraints for P> respective Pbound are constructed from P where we just replace every occurence of "t ≥ s" in P by "t > s" respective "t ≥ c". Here c stands for the fresh constant used for Pbound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:

POL(TRUE) = 0   
POL(FALSE) = 0   
POL(LOAD454(x1, x2, x3)) = [2] + x3 + [-1]x1   
POL(COND_LOAD4541(x1, x2, x3, x4)) = [1] + x4 + [-1]x2   
POL(&&(x1, x2)) = 0   
POL(<=(x1, x2)) = [-1]   
POL(>=(x1, x2)) = [-1]   
POL(+(x1, x2)) = x1 + x2   
POL(*(x1, x2)) = x1·x2   
POL(3) = [3]   
POL(0) = 0   
POL(1) = [1]   
POL(-(x1, x2)) = x1 + [-1]x2   

The following pairs are in P>:

LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])
COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))

The following pairs are in Pbound:

LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])

The following pairs are in P:
none

There are no usable rules.

(20) Complex Obligation (AND)

(21) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:
none


R is empty.

The integer pair graph is empty.

The set Q consists of the following terms:
Load454(x0, x1, x2)
Cond_Load454(TRUE, x0, x1, x2)
Cond_Load4541(TRUE, x0, x1, x2)
Cond_Load4542(TRUE, x0, x1, x2)
Cond_Load4543(TRUE, x0, x1, x2)

(22) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs.

(23) TRUE

(24) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Integer


R is empty.

The integer pair graph contains the following rules and edges:
(3): COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(i101[3] + 1, i102[3] + 1, i103[3] - 1)


The set Q consists of the following terms:
Load454(x0, x1, x2)
Cond_Load454(TRUE, x0, x1, x2)
Cond_Load4541(TRUE, x0, x1, x2)
Cond_Load4542(TRUE, x0, x1, x2)
Cond_Load4543(TRUE, x0, x1, x2)

(25) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.

(26) TRUE

(27) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Integer, Boolean


R is empty.

The integer pair graph contains the following rules and edges:
(7): COND_LOAD4543(TRUE, i101[7], i102[7], i103[7]) → LOAD454(i101[7] + -1, i102[7], i103[7])
(3): COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(i101[3] + 1, i102[3] + 1, i103[3] - 1)
(2): LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(i102[2] <= i103[2] && i101[2] <= i102[2] && i101[2] + i102[2] + 3 * i103[2] >= 0, i101[2], i102[2], i103[2])

(3) -> (2), if ((i101[3] + 1* i101[2])∧(i103[3] - 1* i103[2])∧(i102[3] + 1* i102[2]))


(7) -> (2), if ((i101[7] + -1* i101[2])∧(i102[7]* i102[2])∧(i103[7]* i103[2]))


(2) -> (3), if ((i102[2]* i102[3])∧(i103[2]* i103[3])∧(i101[2]* i101[3])∧(i102[2] <= i103[2] && i101[2] <= i102[2] && i101[2] + i102[2] + 3 * i103[2] >= 0* TRUE))



The set Q consists of the following terms:
Load454(x0, x1, x2)
Cond_Load454(TRUE, x0, x1, x2)
Cond_Load4541(TRUE, x0, x1, x2)
Cond_Load4542(TRUE, x0, x1, x2)
Cond_Load4543(TRUE, x0, x1, x2)

(28) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node.

(29) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Integer, Boolean


R is empty.

The integer pair graph contains the following rules and edges:
(3): COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(i101[3] + 1, i102[3] + 1, i103[3] - 1)
(2): LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(i102[2] <= i103[2] && i101[2] <= i102[2] && i101[2] + i102[2] + 3 * i103[2] >= 0, i101[2], i102[2], i103[2])

(3) -> (2), if ((i101[3] + 1* i101[2])∧(i103[3] - 1* i103[2])∧(i102[3] + 1* i102[2]))


(2) -> (3), if ((i102[2]* i102[3])∧(i103[2]* i103[3])∧(i101[2]* i101[3])∧(i102[2] <= i103[2] && i101[2] <= i102[2] && i101[2] + i102[2] + 3 * i103[2] >= 0* TRUE))



The set Q consists of the following terms:
Load454(x0, x1, x2)
Cond_Load454(TRUE, x0, x1, x2)
Cond_Load4541(TRUE, x0, x1, x2)
Cond_Load4542(TRUE, x0, x1, x2)
Cond_Load4543(TRUE, x0, x1, x2)

(30) IDPNonInfProof (SOUND transformation)

The constraints were generated the following way:
The DP Problem is simplified using the Induction Calculus [NONINF] with the following steps:
Note that final constraints are written in bold face.


For Pair COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1)) the following chains were created:
  • We consider the chain COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1)) which results in the following constraint:

    (1)    (COND_LOAD4541(TRUE, i101[3], i102[3], i103[3])≥NonInfC∧COND_LOAD4541(TRUE, i101[3], i102[3], i103[3])≥LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))∧(UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥))



    We simplified constraint (1) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (2)    ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧[1 + (-1)bso_9] ≥ 0)



    We simplified constraint (2) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (3)    ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧[1 + (-1)bso_9] ≥ 0)



    We simplified constraint (3) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (4)    ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧[1 + (-1)bso_9] ≥ 0)



    We simplified constraint (4) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (5)    ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧0 = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_9] ≥ 0)







For Pair LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2]) the following chains were created:
  • We consider the chain LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2]), COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1)) which results in the following constraint:

    (6)    (i102[2]=i102[3]i103[2]=i103[3]i101[2]=i101[3]&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0))=TRUELOAD454(i101[2], i102[2], i103[2])≥NonInfC∧LOAD454(i101[2], i102[2], i103[2])≥COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])∧(UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥))



    We simplified constraint (6) using rules (IV), (IDP_BOOLEAN) which results in the following new constraint:

    (7)    (>=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)=TRUE<=(i102[2], i103[2])=TRUE<=(i101[2], i102[2])=TRUELOAD454(i101[2], i102[2], i103[2])≥NonInfC∧LOAD454(i101[2], i102[2], i103[2])≥COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])∧(UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥))



    We simplified constraint (7) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (8)    (i101[2] + i102[2] + [3]i103[2] ≥ 0∧i103[2] + [-1]i102[2] ≥ 0∧i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(2)bni_10 + (-1)Bound*bni_10] + [(2)bni_10]i103[2] + [(-1)bni_10]i102[2] ≥ 0∧[2 + (-1)bso_11] ≥ 0)



    We simplified constraint (8) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (9)    (i101[2] + i102[2] + [3]i103[2] ≥ 0∧i103[2] + [-1]i102[2] ≥ 0∧i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(2)bni_10 + (-1)Bound*bni_10] + [(2)bni_10]i103[2] + [(-1)bni_10]i102[2] ≥ 0∧[2 + (-1)bso_11] ≥ 0)



    We simplified constraint (9) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (10)    (i101[2] + i102[2] + [3]i103[2] ≥ 0∧i103[2] + [-1]i102[2] ≥ 0∧i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(2)bni_10 + (-1)Bound*bni_10] + [(2)bni_10]i103[2] + [(-1)bni_10]i102[2] ≥ 0∧[2 + (-1)bso_11] ≥ 0)



    We simplified constraint (10) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (11)    (i101[2] ≥ 0∧i103[2] + [-1]i102[2] ≥ 0∧[2]i102[2] + [3]i103[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(2)bni_10 + (-1)Bound*bni_10] + [(2)bni_10]i103[2] + [(-1)bni_10]i102[2] ≥ 0∧[2 + (-1)bso_11] ≥ 0)



    We simplified constraint (11) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (12)    (i101[2] ≥ 0∧i102[2] ≥ 0∧[5]i103[2] + [-2]i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(2)bni_10 + (-1)Bound*bni_10] + [bni_10]i103[2] + [bni_10]i102[2] ≥ 0∧[2 + (-1)bso_11] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))
    • ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧0 = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_9] ≥ 0)

  • LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])
    • (i101[2] ≥ 0∧i102[2] ≥ 0∧[5]i103[2] + [-2]i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(2)bni_10 + (-1)Bound*bni_10] + [bni_10]i103[2] + [bni_10]i102[2] ≥ 0∧[2 + (-1)bso_11] ≥ 0)




The constraints for P> respective Pbound are constructed from P where we just replace every occurence of "t ≥ s" in P by "t > s" respective "t ≥ c". Here c stands for the fresh constant used for Pbound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:

POL(TRUE) = 0   
POL(FALSE) = 0   
POL(COND_LOAD4541(x1, x2, x3, x4)) = [2]x4 + [-1]x3   
POL(LOAD454(x1, x2, x3)) = [2] + [2]x3 + [-1]x2   
POL(+(x1, x2)) = x1 + x2   
POL(1) = [1]   
POL(-(x1, x2)) = x1 + [-1]x2   
POL(&&(x1, x2)) = [-1]   
POL(<=(x1, x2)) = 0   
POL(>=(x1, x2)) = [-1]   
POL(*(x1, x2)) = x1·x2   
POL(3) = [3]   
POL(0) = 0   

The following pairs are in P>:

COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))
LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])

The following pairs are in Pbound:

LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])

The following pairs are in P:
none

There are no usable rules.

(31) Complex Obligation (AND)

(32) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:
none


R is empty.

The integer pair graph is empty.

The set Q consists of the following terms:
Load454(x0, x1, x2)
Cond_Load454(TRUE, x0, x1, x2)
Cond_Load4541(TRUE, x0, x1, x2)
Cond_Load4542(TRUE, x0, x1, x2)
Cond_Load4543(TRUE, x0, x1, x2)

(33) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs.

(34) TRUE

(35) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Integer


R is empty.

The integer pair graph contains the following rules and edges:
(3): COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(i101[3] + 1, i102[3] + 1, i103[3] - 1)


The set Q consists of the following terms:
Load454(x0, x1, x2)
Cond_Load454(TRUE, x0, x1, x2)
Cond_Load4541(TRUE, x0, x1, x2)
Cond_Load4542(TRUE, x0, x1, x2)
Cond_Load4543(TRUE, x0, x1, x2)

(36) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.

(37) TRUE

(38) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Boolean, Integer


R is empty.

The integer pair graph contains the following rules and edges:
(1): COND_LOAD454(TRUE, i101[1], i102[1], i103[1]) → LOAD454(i101[1], i102[1], i103[1])
(2): LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(i102[2] <= i103[2] && i101[2] <= i102[2] && i101[2] + i102[2] + 3 * i103[2] >= 0, i101[2], i102[2], i103[2])
(3): COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(i101[3] + 1, i102[3] + 1, i103[3] - 1)
(5): COND_LOAD4542(TRUE, i101[5], i102[5], i103[5]) → LOAD454(i101[5] + 1, i102[5] + -2, i103[5])
(6): LOAD454(i101[6], i102[6], i103[6]) → COND_LOAD4543(i101[6] > i102[6] && i101[6] + i102[6] + 3 * i103[6] >= 0, i101[6], i102[6], i103[6])
(7): COND_LOAD4543(TRUE, i101[7], i102[7], i103[7]) → LOAD454(i101[7] + -1, i102[7], i103[7])

(1) -> (2), if ((i101[1]* i101[2])∧(i102[1]* i102[2])∧(i103[1]* i103[2]))


(3) -> (2), if ((i101[3] + 1* i101[2])∧(i103[3] - 1* i103[2])∧(i102[3] + 1* i102[2]))


(5) -> (2), if ((i101[5] + 1* i101[2])∧(i103[5]* i103[2])∧(i102[5] + -2* i102[2]))


(7) -> (2), if ((i101[7] + -1* i101[2])∧(i102[7]* i102[2])∧(i103[7]* i103[2]))


(2) -> (3), if ((i102[2]* i102[3])∧(i103[2]* i103[3])∧(i101[2]* i101[3])∧(i102[2] <= i103[2] && i101[2] <= i102[2] && i101[2] + i102[2] + 3 * i103[2] >= 0* TRUE))


(1) -> (6), if ((i103[1]* i103[6])∧(i101[1]* i101[6])∧(i102[1]* i102[6]))


(3) -> (6), if ((i101[3] + 1* i101[6])∧(i103[3] - 1* i103[6])∧(i102[3] + 1* i102[6]))


(5) -> (6), if ((i103[5]* i103[6])∧(i102[5] + -2* i102[6])∧(i101[5] + 1* i101[6]))


(7) -> (6), if ((i102[7]* i102[6])∧(i101[7] + -1* i101[6])∧(i103[7]* i103[6]))


(6) -> (7), if ((i101[6] > i102[6] && i101[6] + i102[6] + 3 * i103[6] >= 0* TRUE)∧(i101[6]* i101[7])∧(i102[6]* i102[7])∧(i103[6]* i103[7]))



The set Q consists of the following terms:
Load454(x0, x1, x2)
Cond_Load454(TRUE, x0, x1, x2)
Cond_Load4541(TRUE, x0, x1, x2)
Cond_Load4542(TRUE, x0, x1, x2)
Cond_Load4543(TRUE, x0, x1, x2)

(39) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 2 less nodes.

(40) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Integer, Boolean


R is empty.

The integer pair graph contains the following rules and edges:
(7): COND_LOAD4543(TRUE, i101[7], i102[7], i103[7]) → LOAD454(i101[7] + -1, i102[7], i103[7])
(6): LOAD454(i101[6], i102[6], i103[6]) → COND_LOAD4543(i101[6] > i102[6] && i101[6] + i102[6] + 3 * i103[6] >= 0, i101[6], i102[6], i103[6])
(3): COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(i101[3] + 1, i102[3] + 1, i103[3] - 1)
(2): LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(i102[2] <= i103[2] && i101[2] <= i102[2] && i101[2] + i102[2] + 3 * i103[2] >= 0, i101[2], i102[2], i103[2])

(3) -> (2), if ((i101[3] + 1* i101[2])∧(i103[3] - 1* i103[2])∧(i102[3] + 1* i102[2]))


(7) -> (2), if ((i101[7] + -1* i101[2])∧(i102[7]* i102[2])∧(i103[7]* i103[2]))


(2) -> (3), if ((i102[2]* i102[3])∧(i103[2]* i103[3])∧(i101[2]* i101[3])∧(i102[2] <= i103[2] && i101[2] <= i102[2] && i101[2] + i102[2] + 3 * i103[2] >= 0* TRUE))


(3) -> (6), if ((i101[3] + 1* i101[6])∧(i103[3] - 1* i103[6])∧(i102[3] + 1* i102[6]))


(7) -> (6), if ((i102[7]* i102[6])∧(i101[7] + -1* i101[6])∧(i103[7]* i103[6]))


(6) -> (7), if ((i101[6] > i102[6] && i101[6] + i102[6] + 3 * i103[6] >= 0* TRUE)∧(i101[6]* i101[7])∧(i102[6]* i102[7])∧(i103[6]* i103[7]))



The set Q consists of the following terms:
Load454(x0, x1, x2)
Cond_Load454(TRUE, x0, x1, x2)
Cond_Load4541(TRUE, x0, x1, x2)
Cond_Load4542(TRUE, x0, x1, x2)
Cond_Load4543(TRUE, x0, x1, x2)

(41) IDPNonInfProof (SOUND transformation)

The constraints were generated the following way:
The DP Problem is simplified using the Induction Calculus [NONINF] with the following steps:
Note that final constraints are written in bold face.


For Pair COND_LOAD4543(TRUE, i101[7], i102[7], i103[7]) → LOAD454(+(i101[7], -1), i102[7], i103[7]) the following chains were created:
  • We consider the chain COND_LOAD4543(TRUE, i101[7], i102[7], i103[7]) → LOAD454(+(i101[7], -1), i102[7], i103[7]) which results in the following constraint:

    (1)    (COND_LOAD4543(TRUE, i101[7], i102[7], i103[7])≥NonInfC∧COND_LOAD4543(TRUE, i101[7], i102[7], i103[7])≥LOAD454(+(i101[7], -1), i102[7], i103[7])∧(UIncreasing(LOAD454(+(i101[7], -1), i102[7], i103[7])), ≥))



    We simplified constraint (1) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (2)    ((UIncreasing(LOAD454(+(i101[7], -1), i102[7], i103[7])), ≥)∧[(-1)bso_11] ≥ 0)



    We simplified constraint (2) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (3)    ((UIncreasing(LOAD454(+(i101[7], -1), i102[7], i103[7])), ≥)∧[(-1)bso_11] ≥ 0)



    We simplified constraint (3) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (4)    ((UIncreasing(LOAD454(+(i101[7], -1), i102[7], i103[7])), ≥)∧[(-1)bso_11] ≥ 0)



    We simplified constraint (4) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (5)    ((UIncreasing(LOAD454(+(i101[7], -1), i102[7], i103[7])), ≥)∧0 = 0∧0 = 0∧0 = 0∧[(-1)bso_11] ≥ 0)







For Pair LOAD454(i101[6], i102[6], i103[6]) → COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6]) the following chains were created:
  • We consider the chain LOAD454(i101[6], i102[6], i103[6]) → COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6]), COND_LOAD4543(TRUE, i101[7], i102[7], i103[7]) → LOAD454(+(i101[7], -1), i102[7], i103[7]) which results in the following constraint:

    (6)    (&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0))=TRUEi101[6]=i101[7]i102[6]=i102[7]i103[6]=i103[7]LOAD454(i101[6], i102[6], i103[6])≥NonInfC∧LOAD454(i101[6], i102[6], i103[6])≥COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])∧(UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥))



    We simplified constraint (6) using rules (IV), (IDP_BOOLEAN) which results in the following new constraint:

    (7)    (>(i101[6], i102[6])=TRUE>=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)=TRUELOAD454(i101[6], i102[6], i103[6])≥NonInfC∧LOAD454(i101[6], i102[6], i103[6])≥COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])∧(UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥))



    We simplified constraint (7) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (8)    (i101[6] + [-1] + [-1]i102[6] ≥ 0∧i101[6] + i102[6] + [3]i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_12] + [bni_12]i101[6] + [(-1)bni_12]i102[6] ≥ 0∧[1 + (-1)bso_13] ≥ 0)



    We simplified constraint (8) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (9)    (i101[6] + [-1] + [-1]i102[6] ≥ 0∧i101[6] + i102[6] + [3]i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_12] + [bni_12]i101[6] + [(-1)bni_12]i102[6] ≥ 0∧[1 + (-1)bso_13] ≥ 0)



    We simplified constraint (9) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (10)    (i101[6] + [-1] + [-1]i102[6] ≥ 0∧i101[6] + i102[6] + [3]i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_12] + [bni_12]i101[6] + [(-1)bni_12]i102[6] ≥ 0∧[1 + (-1)bso_13] ≥ 0)



    We simplified constraint (10) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (11)    (i101[6] ≥ 0∧[1] + [2]i102[6] + i101[6] + [3]i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_12 + bni_12] + [bni_12]i101[6] ≥ 0∧[1 + (-1)bso_13] ≥ 0)



    We simplified constraint (11) using rule (IDP_SMT_SPLIT) which results in the following new constraints:

    (12)    (i101[6] ≥ 0∧[1] + [2]i102[6] + i101[6] + [3]i103[6] ≥ 0∧i102[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_12 + bni_12] + [bni_12]i101[6] ≥ 0∧[1 + (-1)bso_13] ≥ 0)


    (13)    (i101[6] ≥ 0∧[1] + [-2]i102[6] + i101[6] + [3]i103[6] ≥ 0∧i102[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_12 + bni_12] + [bni_12]i101[6] ≥ 0∧[1 + (-1)bso_13] ≥ 0)



    We simplified constraint (12) using rule (IDP_SMT_SPLIT) which results in the following new constraints:

    (14)    (i101[6] ≥ 0∧[1] + [2]i102[6] + i101[6] + [3]i103[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_12 + bni_12] + [bni_12]i101[6] ≥ 0∧[1 + (-1)bso_13] ≥ 0)


    (15)    (i101[6] ≥ 0∧[1] + [2]i102[6] + i101[6] + [-3]i103[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_12 + bni_12] + [bni_12]i101[6] ≥ 0∧[1 + (-1)bso_13] ≥ 0)



    We simplified constraint (13) using rule (IDP_SMT_SPLIT) which results in the following new constraints:

    (16)    (i101[6] ≥ 0∧[1] + [-2]i102[6] + i101[6] + [3]i103[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_12 + bni_12] + [bni_12]i101[6] ≥ 0∧[1 + (-1)bso_13] ≥ 0)


    (17)    (i101[6] ≥ 0∧[1] + [-2]i102[6] + i101[6] + [-3]i103[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_12 + bni_12] + [bni_12]i101[6] ≥ 0∧[1 + (-1)bso_13] ≥ 0)



    We simplified constraint (14) using rule (IDP_POLY_GCD) which results in the following new constraint:

    (18)    (i101[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0∧i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_12 + bni_12] + [bni_12]i101[6] ≥ 0∧[1 + (-1)bso_13] ≥ 0)



    We simplified constraint (15) using rule (IDP_POLY_GCD) which results in the following new constraint:

    (19)    (i101[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0∧[-1]i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_12 + bni_12] + [bni_12]i101[6] ≥ 0∧[1 + (-1)bso_13] ≥ 0)



    We simplified constraint (16) using rule (IDP_POLY_GCD) which results in the following new constraint:

    (20)    (i101[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0∧i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_12 + bni_12] + [bni_12]i101[6] ≥ 0∧[1 + (-1)bso_13] ≥ 0)



    We simplified constraint (17) using rule (IDP_POLY_GCD) which results in the following new constraint:

    (21)    (i101[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0∧[-1]i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_12 + bni_12] + [bni_12]i101[6] ≥ 0∧[1 + (-1)bso_13] ≥ 0)







For Pair COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1)) the following chains were created:
  • We consider the chain COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1)) which results in the following constraint:

    (22)    (COND_LOAD4541(TRUE, i101[3], i102[3], i103[3])≥NonInfC∧COND_LOAD4541(TRUE, i101[3], i102[3], i103[3])≥LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))∧(UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥))



    We simplified constraint (22) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (23)    ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧[(-1)bso_15] ≥ 0)



    We simplified constraint (23) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (24)    ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧[(-1)bso_15] ≥ 0)



    We simplified constraint (24) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (25)    ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧[(-1)bso_15] ≥ 0)



    We simplified constraint (25) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (26)    ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧0 = 0∧0 = 0∧0 = 0∧[(-1)bso_15] ≥ 0)







For Pair LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2]) the following chains were created:
  • We consider the chain LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2]), COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1)) which results in the following constraint:

    (27)    (i102[2]=i102[3]i103[2]=i103[3]i101[2]=i101[3]&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0))=TRUELOAD454(i101[2], i102[2], i103[2])≥NonInfC∧LOAD454(i101[2], i102[2], i103[2])≥COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])∧(UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥))



    We simplified constraint (27) using rules (IV), (IDP_BOOLEAN) which results in the following new constraint:

    (28)    (>=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)=TRUE<=(i102[2], i103[2])=TRUE<=(i101[2], i102[2])=TRUELOAD454(i101[2], i102[2], i103[2])≥NonInfC∧LOAD454(i101[2], i102[2], i103[2])≥COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])∧(UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥))



    We simplified constraint (28) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (29)    (i101[2] + i102[2] + [3]i103[2] ≥ 0∧i103[2] + [-1]i102[2] ≥ 0∧i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(-1)Bound*bni_16] + [bni_16]i101[2] + [(-1)bni_16]i102[2] ≥ 0∧[(-1)bso_17] ≥ 0)



    We simplified constraint (29) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (30)    (i101[2] + i102[2] + [3]i103[2] ≥ 0∧i103[2] + [-1]i102[2] ≥ 0∧i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(-1)Bound*bni_16] + [bni_16]i101[2] + [(-1)bni_16]i102[2] ≥ 0∧[(-1)bso_17] ≥ 0)



    We simplified constraint (30) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (31)    (i101[2] + i102[2] + [3]i103[2] ≥ 0∧i103[2] + [-1]i102[2] ≥ 0∧i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(-1)Bound*bni_16] + [bni_16]i101[2] + [(-1)bni_16]i102[2] ≥ 0∧[(-1)bso_17] ≥ 0)



    We simplified constraint (31) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (32)    (i101[2] ≥ 0∧i103[2] + [-1]i102[2] ≥ 0∧[2]i102[2] + [3]i103[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(-1)Bound*bni_16] + [(-2)bni_16]i102[2] + [(-3)bni_16]i103[2] + [bni_16]i101[2] ≥ 0∧[(-1)bso_17] ≥ 0)



    We simplified constraint (32) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (33)    (i101[2] ≥ 0∧i102[2] ≥ 0∧[5]i103[2] + [-2]i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(-1)Bound*bni_16] + [(-5)bni_16]i103[2] + [(2)bni_16]i102[2] + [bni_16]i101[2] ≥ 0∧[(-1)bso_17] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • COND_LOAD4543(TRUE, i101[7], i102[7], i103[7]) → LOAD454(+(i101[7], -1), i102[7], i103[7])
    • ((UIncreasing(LOAD454(+(i101[7], -1), i102[7], i103[7])), ≥)∧0 = 0∧0 = 0∧0 = 0∧[(-1)bso_11] ≥ 0)

  • LOAD454(i101[6], i102[6], i103[6]) → COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])
    • (i101[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0∧i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_12 + bni_12] + [bni_12]i101[6] ≥ 0∧[1 + (-1)bso_13] ≥ 0)
    • (i101[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0∧[-1]i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_12 + bni_12] + [bni_12]i101[6] ≥ 0∧[1 + (-1)bso_13] ≥ 0)
    • (i101[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0∧i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_12 + bni_12] + [bni_12]i101[6] ≥ 0∧[1 + (-1)bso_13] ≥ 0)
    • (i101[6] ≥ 0∧i102[6] ≥ 0∧i103[6] ≥ 0∧[-1]i103[6] ≥ 0 ⇒ (UIncreasing(COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])), ≥)∧[(-1)Bound*bni_12 + bni_12] + [bni_12]i101[6] ≥ 0∧[1 + (-1)bso_13] ≥ 0)

  • COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))
    • ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧0 = 0∧0 = 0∧0 = 0∧[(-1)bso_15] ≥ 0)

  • LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])
    • (i101[2] ≥ 0∧i102[2] ≥ 0∧[5]i103[2] + [-2]i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(-1)Bound*bni_16] + [(-5)bni_16]i103[2] + [(2)bni_16]i102[2] + [bni_16]i101[2] ≥ 0∧[(-1)bso_17] ≥ 0)




The constraints for P> respective Pbound are constructed from P where we just replace every occurence of "t ≥ s" in P by "t > s" respective "t ≥ c". Here c stands for the fresh constant used for Pbound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:

POL(TRUE) = 0   
POL(FALSE) = 0   
POL(COND_LOAD4543(x1, x2, x3, x4)) = [-1] + [-1]x3 + x2   
POL(LOAD454(x1, x2, x3)) = x1 + [-1]x2   
POL(+(x1, x2)) = x1 + x2   
POL(-1) = [-1]   
POL(&&(x1, x2)) = [-1]   
POL(>(x1, x2)) = [1]   
POL(>=(x1, x2)) = [-1]   
POL(*(x1, x2)) = x1·x2   
POL(3) = [3]   
POL(0) = 0   
POL(COND_LOAD4541(x1, x2, x3, x4)) = [-1]x3 + x2   
POL(1) = [1]   
POL(-(x1, x2)) = x1 + [-1]x2   
POL(<=(x1, x2)) = [-1]   

The following pairs are in P>:

LOAD454(i101[6], i102[6], i103[6]) → COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])

The following pairs are in Pbound:

LOAD454(i101[6], i102[6], i103[6]) → COND_LOAD4543(&&(>(i101[6], i102[6]), >=(+(+(i101[6], i102[6]), *(3, i103[6])), 0)), i101[6], i102[6], i103[6])

The following pairs are in P:

COND_LOAD4543(TRUE, i101[7], i102[7], i103[7]) → LOAD454(+(i101[7], -1), i102[7], i103[7])
COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))
LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])

There are no usable rules.

(42) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Integer, Boolean


R is empty.

The integer pair graph contains the following rules and edges:
(7): COND_LOAD4543(TRUE, i101[7], i102[7], i103[7]) → LOAD454(i101[7] + -1, i102[7], i103[7])
(3): COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(i101[3] + 1, i102[3] + 1, i103[3] - 1)
(2): LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(i102[2] <= i103[2] && i101[2] <= i102[2] && i101[2] + i102[2] + 3 * i103[2] >= 0, i101[2], i102[2], i103[2])

(3) -> (2), if ((i101[3] + 1* i101[2])∧(i103[3] - 1* i103[2])∧(i102[3] + 1* i102[2]))


(7) -> (2), if ((i101[7] + -1* i101[2])∧(i102[7]* i102[2])∧(i103[7]* i103[2]))


(2) -> (3), if ((i102[2]* i102[3])∧(i103[2]* i103[3])∧(i101[2]* i101[3])∧(i102[2] <= i103[2] && i101[2] <= i102[2] && i101[2] + i102[2] + 3 * i103[2] >= 0* TRUE))



The set Q consists of the following terms:
Load454(x0, x1, x2)
Cond_Load454(TRUE, x0, x1, x2)
Cond_Load4541(TRUE, x0, x1, x2)
Cond_Load4542(TRUE, x0, x1, x2)
Cond_Load4543(TRUE, x0, x1, x2)

(43) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node.

(44) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Integer, Boolean


R is empty.

The integer pair graph contains the following rules and edges:
(3): COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(i101[3] + 1, i102[3] + 1, i103[3] - 1)
(2): LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(i102[2] <= i103[2] && i101[2] <= i102[2] && i101[2] + i102[2] + 3 * i103[2] >= 0, i101[2], i102[2], i103[2])

(3) -> (2), if ((i101[3] + 1* i101[2])∧(i103[3] - 1* i103[2])∧(i102[3] + 1* i102[2]))


(2) -> (3), if ((i102[2]* i102[3])∧(i103[2]* i103[3])∧(i101[2]* i101[3])∧(i102[2] <= i103[2] && i101[2] <= i102[2] && i101[2] + i102[2] + 3 * i103[2] >= 0* TRUE))



The set Q consists of the following terms:
Load454(x0, x1, x2)
Cond_Load454(TRUE, x0, x1, x2)
Cond_Load4541(TRUE, x0, x1, x2)
Cond_Load4542(TRUE, x0, x1, x2)
Cond_Load4543(TRUE, x0, x1, x2)

(45) IDPNonInfProof (SOUND transformation)

The constraints were generated the following way:
The DP Problem is simplified using the Induction Calculus [NONINF] with the following steps:
Note that final constraints are written in bold face.


For Pair COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1)) the following chains were created:
  • We consider the chain COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1)) which results in the following constraint:

    (1)    (COND_LOAD4541(TRUE, i101[3], i102[3], i103[3])≥NonInfC∧COND_LOAD4541(TRUE, i101[3], i102[3], i103[3])≥LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))∧(UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥))



    We simplified constraint (1) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (2)    ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧[1 + (-1)bso_9] ≥ 0)



    We simplified constraint (2) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (3)    ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧[1 + (-1)bso_9] ≥ 0)



    We simplified constraint (3) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (4)    ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧[1 + (-1)bso_9] ≥ 0)



    We simplified constraint (4) using rule (IDP_UNRESTRICTED_VARS) which results in the following new constraint:

    (5)    ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧0 = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_9] ≥ 0)







For Pair LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2]) the following chains were created:
  • We consider the chain LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2]), COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1)) which results in the following constraint:

    (6)    (i102[2]=i102[3]i103[2]=i103[3]i101[2]=i101[3]&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0))=TRUELOAD454(i101[2], i102[2], i103[2])≥NonInfC∧LOAD454(i101[2], i102[2], i103[2])≥COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])∧(UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥))



    We simplified constraint (6) using rules (IV), (IDP_BOOLEAN) which results in the following new constraint:

    (7)    (>=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)=TRUE<=(i102[2], i103[2])=TRUE<=(i101[2], i102[2])=TRUELOAD454(i101[2], i102[2], i103[2])≥NonInfC∧LOAD454(i101[2], i102[2], i103[2])≥COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])∧(UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥))



    We simplified constraint (7) using rule (POLY_CONSTRAINTS) which results in the following new constraint:

    (8)    (i101[2] + i102[2] + [3]i103[2] ≥ 0∧i103[2] + [-1]i102[2] ≥ 0∧i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(2)bni_10 + (-1)Bound*bni_10] + [(2)bni_10]i103[2] + [(-1)bni_10]i102[2] ≥ 0∧[2 + (-1)bso_11] ≥ 0)



    We simplified constraint (8) using rule (IDP_POLY_SIMPLIFY) which results in the following new constraint:

    (9)    (i101[2] + i102[2] + [3]i103[2] ≥ 0∧i103[2] + [-1]i102[2] ≥ 0∧i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(2)bni_10 + (-1)Bound*bni_10] + [(2)bni_10]i103[2] + [(-1)bni_10]i102[2] ≥ 0∧[2 + (-1)bso_11] ≥ 0)



    We simplified constraint (9) using rule (POLY_REMOVE_MIN_MAX) which results in the following new constraint:

    (10)    (i101[2] + i102[2] + [3]i103[2] ≥ 0∧i103[2] + [-1]i102[2] ≥ 0∧i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(2)bni_10 + (-1)Bound*bni_10] + [(2)bni_10]i103[2] + [(-1)bni_10]i102[2] ≥ 0∧[2 + (-1)bso_11] ≥ 0)



    We simplified constraint (10) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (11)    (i101[2] ≥ 0∧i103[2] + [-1]i102[2] ≥ 0∧[2]i102[2] + [3]i103[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(2)bni_10 + (-1)Bound*bni_10] + [(2)bni_10]i103[2] + [(-1)bni_10]i102[2] ≥ 0∧[2 + (-1)bso_11] ≥ 0)



    We simplified constraint (11) using rule (IDP_SMT_SPLIT) which results in the following new constraint:

    (12)    (i101[2] ≥ 0∧i102[2] ≥ 0∧[5]i103[2] + [-2]i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(2)bni_10 + (-1)Bound*bni_10] + [bni_10]i103[2] + [bni_10]i102[2] ≥ 0∧[2 + (-1)bso_11] ≥ 0)







To summarize, we get the following constraints P for the following pairs.
  • COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))
    • ((UIncreasing(LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))), ≥)∧0 = 0∧0 = 0∧0 = 0∧[1 + (-1)bso_9] ≥ 0)

  • LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])
    • (i101[2] ≥ 0∧i102[2] ≥ 0∧[5]i103[2] + [-2]i102[2] + [-1]i101[2] ≥ 0 ⇒ (UIncreasing(COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])), ≥)∧[(2)bni_10 + (-1)Bound*bni_10] + [bni_10]i103[2] + [bni_10]i102[2] ≥ 0∧[2 + (-1)bso_11] ≥ 0)




The constraints for P> respective Pbound are constructed from P where we just replace every occurence of "t ≥ s" in P by "t > s" respective "t ≥ c". Here c stands for the fresh constant used for Pbound.
Using the following integer polynomial ordering the resulting constraints can be solved
Polynomial interpretation over integers[POLO]:

POL(TRUE) = 0   
POL(FALSE) = 0   
POL(COND_LOAD4541(x1, x2, x3, x4)) = [2]x4 + [-1]x3   
POL(LOAD454(x1, x2, x3)) = [2] + [2]x3 + [-1]x2   
POL(+(x1, x2)) = x1 + x2   
POL(1) = [1]   
POL(-(x1, x2)) = x1 + [-1]x2   
POL(&&(x1, x2)) = [-1]   
POL(<=(x1, x2)) = 0   
POL(>=(x1, x2)) = [-1]   
POL(*(x1, x2)) = x1·x2   
POL(3) = [3]   
POL(0) = 0   

The following pairs are in P>:

COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(+(i101[3], 1), +(i102[3], 1), -(i103[3], 1))
LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])

The following pairs are in Pbound:

LOAD454(i101[2], i102[2], i103[2]) → COND_LOAD4541(&&(&&(<=(i102[2], i103[2]), <=(i101[2], i102[2])), >=(+(+(i101[2], i102[2]), *(3, i103[2])), 0)), i101[2], i102[2], i103[2])

The following pairs are in P:
none

There are no usable rules.

(46) Complex Obligation (AND)

(47) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:
none


R is empty.

The integer pair graph is empty.

The set Q consists of the following terms:
Load454(x0, x1, x2)
Cond_Load454(TRUE, x0, x1, x2)
Cond_Load4541(TRUE, x0, x1, x2)
Cond_Load4542(TRUE, x0, x1, x2)
Cond_Load4543(TRUE, x0, x1, x2)

(48) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs.

(49) TRUE

(50) Obligation:

IDP problem:
The following function symbols are pre-defined:
!=~Neq: (Integer, Integer) -> Boolean
*~Mul: (Integer, Integer) -> Integer
>=~Ge: (Integer, Integer) -> Boolean
-1~UnaryMinus: (Integer) -> Integer
|~Bwor: (Integer, Integer) -> Integer
/~Div: (Integer, Integer) -> Integer
=~Eq: (Integer, Integer) -> Boolean
~Bwxor: (Integer, Integer) -> Integer
||~Lor: (Boolean, Boolean) -> Boolean
!~Lnot: (Boolean) -> Boolean
<~Lt: (Integer, Integer) -> Boolean
-~Sub: (Integer, Integer) -> Integer
<=~Le: (Integer, Integer) -> Boolean
>~Gt: (Integer, Integer) -> Boolean
~~Bwnot: (Integer) -> Integer
%~Mod: (Integer, Integer) -> Integer
&~Bwand: (Integer, Integer) -> Integer
+~Add: (Integer, Integer) -> Integer
&&~Land: (Boolean, Boolean) -> Boolean


The following domains are used:

Integer


R is empty.

The integer pair graph contains the following rules and edges:
(3): COND_LOAD4541(TRUE, i101[3], i102[3], i103[3]) → LOAD454(i101[3] + 1, i102[3] + 1, i103[3] - 1)


The set Q consists of the following terms:
Load454(x0, x1, x2)
Cond_Load454(TRUE, x0, x1, x2)
Cond_Load4541(TRUE, x0, x1, x2)
Cond_Load4542(TRUE, x0, x1, x2)
Cond_Load4543(TRUE, x0, x1, x2)

(51) IDependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 0 SCCs with 1 less node.

(52) TRUE